- 新增 IShrinkEventBus、ShrinkEventBusBuilder 与 ShrinkEventBusInstance,支持独立 bus、异常策略、启动开关、类型校验和按 phase 派发 - 新增 SubscribeEvent 可释放订阅句柄与订阅快照接口,保留 EventBus 静态门面并委托到默认实例 - 重构监听列表为父子事件链共享锁与快照缓存,支持父事件监听子事件、跨父子数字优先级归并和防御性快照拷贝 - 优化 EventBase 元数据缓存、懒生成 EventId、派发快照挂接与对象池双重归还保护,移除旧 EventCache 热路径 - 恢复本地 ILPostProcessor 兜底并生成静态订阅注册表,避免共享 CodeGen 覆盖外程序集自动注册失效 - 改进事件查看器、Benchmark、README 与 CHANGELOG,并新增 Dispatch/Priority/Registration/Subscription 测试覆盖核心行为 BREAKING CHANGE: 移除 EventBase.GetListenerList(),int 数字优先级重载不再提供默认值,数字优先级 0 现在映射为 NORMAL。
84 lines
3.0 KiB
Plaintext
84 lines
3.0 KiB
Plaintext
╔══════════════════════════════════════════════════╗
|
||
║ ShrinkEventBus Benchmark Report ║
|
||
║ iter= 1000000 mass= 10000 reg= 5000 scan=1000 ║
|
||
╚══════════════════════════════════════════════════╝
|
||
基准对象:独立实例 bus(AllowPerPhaseDispatch 已开启)
|
||
采集于 1.3.0(EventBase 瘦身后;Unity 2022.3.62f3, Editor Play Mode)
|
||
|
||
▶ TriggerEvent × 无订阅者(基线)
|
||
总耗时 : 111.466 ms
|
||
单次 : 0.1115 μs/op
|
||
吞吐量 : 8971378 ops/s
|
||
|
||
▶ TriggerEvent × 单订阅者同步
|
||
总耗时 : 163.073 ms
|
||
单次 : 0.1631 μs/op
|
||
吞吐量 : 6132242 ops/s
|
||
|
||
▶ TriggerEvent × 父事件监听子事件
|
||
总耗时 : 171.424 ms
|
||
单次 : 0.1714 μs/op
|
||
吞吐量 : 5833479 ops/s
|
||
|
||
▶ TriggerEvent × 30 订阅者同步
|
||
总耗时 : 38.639 ms
|
||
单次 : 3.8639 μs/op
|
||
吞吐量 : 258805 ops/s
|
||
|
||
▶ TriggerEvent(Phase=HIGH) × 3 phase 监听
|
||
总耗时 : 164.197 ms
|
||
单次 : 0.1642 μs/op
|
||
吞吐量 : 6090238 ops/s
|
||
|
||
▶ TriggerEventAsync × 单订阅者异步
|
||
总耗时 : 0.856 ms
|
||
单次 : 0.8557 μs/op
|
||
吞吐量 : 1168634 ops/s
|
||
|
||
▶ RegisterEvent(delegate)
|
||
总耗时 : 14.418 ms
|
||
单次 : 2.8836 μs/op
|
||
吞吐量 : 346791 ops/s
|
||
|
||
▶ UnregisterEvent(delegate)
|
||
总耗时 : 3.427 ms
|
||
单次 : 0.6853 μs/op
|
||
吞吐量 : 1459130 ops/s
|
||
|
||
▶ Register/Unregister(instance scan)
|
||
总耗时 : 13.097 ms
|
||
单次 : 13.0971 μs/op
|
||
吞吐量 : 76353 ops/s
|
||
|
||
▶ Register/Unregister(static type scan)
|
||
总耗时 : 9.337 ms
|
||
单次 : 9.3374 μs/op
|
||
吞吐量 : 107096 ops/s
|
||
|
||
▶ Register/Unregister(MethodInfo)
|
||
总耗时 : 6.513 ms
|
||
单次 : 6.5134 μs/op
|
||
吞吐量 : 153530 ops/s
|
||
|
||
▶ TriggerEvent × new() [GC Gen0= 1]
|
||
总耗时 : 266.536 ms
|
||
单次 : 0.2665 μs/op
|
||
吞吐量 : 3751843 ops/s
|
||
|
||
▶ TriggerEvent × Pool.Get() [GC Gen0= 0]
|
||
总耗时 : 242.015 ms
|
||
单次 : 0.2420 μs/op
|
||
吞吐量 : 4131982 ops/s
|
||
|
||
▶ TriggerEvent × 已取消事件跳过(10 订阅者)
|
||
总耗时 : 52.777 ms
|
||
单次 : 0.5278 μs/op
|
||
吞吐量 : 1894776 ops/s
|
||
|
||
══════════════════════════════════════════════════
|
||
全部测试完成
|
||
|
||
对比 1.1.x 旧样本:new() 路径 7684ms / GC Gen0=6457 → 266ms / GC Gen0=1
|
||
(EventBase 不再每实例分配内置 ListenerList,new() 路径 GC 基本归零,
|
||
对象池从“高频必需”降级为可选优化。)
|