ShrinkEventBus 2.0 Benchmark Report =================================== Date: 2026-08-24 Unity: 2022.3.62f3 Platform: WindowsEditor, Play Mode Host: independent ShrinkEventBusHost, Inline scheduler Diagnostics: independent Host; detailed global capture does not observe it Final run: iter=10,000,000 mass=1,000,000 reg=5,000, three rounds Median results -------------- Post / 0 handlers 129,282,649 ops/s Post / 1 handler 67,249,586 ops/s Post / 8 handlers, struct payload 35,024,798 ops/s Post / 8 handlers, class payload 25,321,199 ops/s Post / 30 handlers 10,823,612 ops/s Post / canceled skips 10 9,029,517 ops/s PostAsync / 1 async handler 5,909,446 ops/s Generated Attach + Dispose 674,291 ops/s Struct hot path allocation 0 B / 10,000,000 Post operations Comparison ---------- Supplied MessagePipe chart, class payload, 8 handlers: 25,639,260 publish/s ShrinkEventBus 2.0, class payload, 8 handlers: 25,321,199 publish/s median ShrinkEventBus 2.0, struct payload, 8 handlers: 35,024,798 publish/s median Supplied ShrinkEventBus 1.3.0 sample: 0 handlers: 8,971,378 -> 129,282,649 ops/s 1 handler: 6,132,242 -> 67,249,586 ops/s 30 handlers: 258,805 -> 10,823,612 ops/s canceled skips 10: 1,894,776 -> 9,029,517 ops/s 1 async handler: 1,168,634 -> 5,909,446 ops/s instance scan/register: 76,353 -> 674,291 generated Attach/s Implementation notes -------------------- - Inline buses use a dedicated implementation so the JIT can inline the channel dispatch path. - Non-cancelable, all-sync channels build a priority-ordered multicast dispatcher when subscriptions change. - ShrinkPostResult stores Accepted/Handled/Canceled/Failure in one 32-bit value. - Generic bus slots and handler snapshots are published with release semantics and read without a publish lock. - Mixed sync/async channels, cancelable events, queued schedulers and PostAsync retain the full semantic path. Results are local editor measurements, not cross-device guarantees. The supplied MessagePipe chart was produced by a different runtime and machine; the class-payload comparison only establishes the same order of throughput. Recheck on the target Player and hardware before release.