Skip to content

Performance

NamedSignal implements standard optimizations such as thread recycling (multiple threads) and linked lists, most of its features have comparable performance to other implementations, except for Signal:Fire(), which is 3-4x faster according to benchmarks!

Benchmarks

Benchmarked with the included Benchmark.rbxm, and with the following details:

  • Windows 11 Pro
  • Ryzen 7 5700X3D 8-Core Processor
  • 32GB DDR4 3200MT/s (4x8)

All libraries were benchmarked with their respective immediate modes instead of deferred modes if applicable.

NamedSignal (Immediate)

Signal.new()

512.6000000927888 µs (10000 call total)

Signal:Connect()

928.7000002586865 µs (5000 call total)

Signal:Once()

1308.7000002087734 µs (5000 call total)

Signal:Wait()

1675.7999997025763 µs (5000 call total)

Signal:Fire()

Connection Count Time (200 call average)
0 connections 0.09800000043469481 µs
1 connections 0.24599999960628338 µs
100 connections 11.63700000006429 µs
1000 connections 104.02749999911975 µs
5000 connections 542.037000000164 µs

Signal:Disconnect()

Connection Count Time (5000 disconnects)
5000 to 0 connections 656.8000003426278 µs
11000 to 6000 connections 450.999999884516 µs
15000 to 10000 connections 363.39999996926053 µs

Signal:DisconnectAll()

Connection Count Time (500 call average)
0 connections 0.17520001165394206 µs
100 connections 1.1045999963243958 µs
1000 connections 9.872799997538095 µs
5000 connections 52.23460000433988 µs

Signal:Destroy()

Connection Count Time (500 call average)
0 connections 0.13919999673817074 µs
100 connections 1.118599992878444 µs
1000 connections 9.628000007978699 µs
5000 connections 52.96179998822481 µs

SignalPlus (Immediate)

Signal.new()

267.50000006359187 µs (10000 call total)

Signal:Connect()

399.8999999339503 µs (5000 call total)

Signal:Once()

545.6999999751133 µs (5000 call total)

Signal:Wait()

1135.2999999871827 µs (5000 call total)

Signal:Fire()

Connection Count Time (200 call average)
0 connections 0.03900000024259498 µs
1 connections 0.5060000000867149 µs
100 connections 43.24550000035288 µs
1000 connections 435.5209999999943 µs
5000 connections 2175.2580000003263 µs

Signal:Disconnect()

Connection Count Time (5000 disconnects)
5000 to 0 connections 239.09999993065867 µs
11000 to 6000 connections 231.9999999826905 µs
15000 to 10000 connections 249.10000001909793 µs

Signal:DisconnectAll()

Connection Count Time (500 call average)
0 connections 0.0786000011885335 µs
100 connections 1.9902000010461052 µs
1000 connections 19.697599998607984 µs
5000 connections 97.33379999988756 µs

Signal:Destroy()

Connection Count Time (500 call average)
0 connections 0.16439999990325305 µs
100 connections 2.0638000007693336 µs
1000 connections 19.38200000040524 µs
5000 connections 97.86559999770361 µs

LemonSignal

Signal.new()

389.7999999935564 µs (10000 call total)

Signal:Connect()

419.899999997142 µs (5000 call total)

Signal:Once()

652.500000001055 µs (5000 call total)

Signal:Wait()

1042.1999999152831 µs (5000 call total)

Signal:Fire()

Connection Count Time (200 call average)
0 connections 0.04850000038914004 µs
1 connections 0.9205000003476016 µs
100 connections 65.96199999989949 µs
1000 connections 450.2524999998059 µs
5000 connections 2268.1345000000874 µs

Signal:Disconnect()

Connection Count Time (5000 disconnects)
5000 to 0 connections 268.69999999235006 µs
11000 to 6000 connections 266.90000004236936 µs
15000 to 10000 connections 280.5999999964115 µs

Signal:DisconnectAll()

Connection Count Time (500 call average)
0 connections 0.053200000593278673 µs
100 connections 2.9320000053303374 µs
1000 connections 28.414600002179213 µs
5000 connections 143.57219999988047 µs

Signal:Destroy()

Connection Count Time (500 call average)
0 connections 0.06599999983336602 µs
100 connections 2.9831999956968502 µs
1000 connections 28.356799998846327 µs
5000 connections 150.04960000442225 µs

FastSignal (Immediate)

Signal.new()

445.7000004549627 µs (10000 call total)

Signal:Connect()

782.1999997759121 µs (5000 call total)

Signal:Once()

812.6000002448563 µs (5000 call total)

Signal:Wait()

3521.999999975378 µs (5000 call total)

Signal:Fire()

Connection Count Time (200 call average)
0 connections 0.049000000217347406 µs
1 connections 0.4875000013271347 µs
100 connections 43.87949999909324 µs
1000 connections 468.44399999827147 µs
5000 connections 2132.1844999965833 µs

Signal:Disconnect()

Connection Count Time (5000 disconnects)
5000 to 0 connections 251.80000011459924 µs
11000 to 6000 connections 251.7000002626446 µs
15000 to 10000 connections 255.40000024193432 µs

Signal:DisconnectAll()

Connection Count Time (500 call average)
0 connections 0.0712000073690433 µs
100 connections 1.8486000244593015 µs
1000 connections 16.75280002200452 µs
5000 connections 85.32660000309988 µs

Signal:Destroy()

Connection Count Time (500 call average)
0 connections 0.09380000483361073 µs
100 connections 1.9170000050507952 µs
1000 connections 17.063200009943102 µs
5000 connections 86.44400002049224 µs

GoodSignal

Signal.new()

576.1000002166838 µs (10000 call total)

Signal:Connect()

789.4999998825369 µs (5000 call total)

Signal:Once()

1106.2999992645928 µs (5000 call total)

Signal:Wait()

1332.8000004548812 µs (5000 call total)

Signal:Fire()

Connection Count Time (200 call average)
0 connections 0.03499999820633093 µs
1 connections 0.5694999981642468 µs
100 connections 41.92849999981263 µs
1000 connections 484.88150000139285 µs
5000 connections 2494.465999998283 µs

Signal:Disconnect()

Connection Count Time (5000 disconnects)
5000 to 0 connections 132245.3000002497 µs
11000 to 6000 connections 446723.50000018923 µs
15000 to 10000 connections 346957.09999959945 µs

Signal:DisconnectAll()

Connection Count Time (500 call average)
0 connections 0.04919999810226727 µs
100 connections 0.057599992942414246 µs
1000 connections 0.07960003313201014 µs
5000 connections 0.11879999328812119 µs

Signal:Destroy()

Connection Count Time (500 call average)
N/A: No Signal:Destroy()