ALEXTANGXIAO / TEngine

Unity框架解决方案-支持HybridCLR(最好的次时代热更)与YooAssets(优秀商业级资源框架)。
MIT License
1.09k stars 236 forks source link

"高效且无GC的事件系统GameEvent",事件系统实测产生大量GC🤔 #67

Closed gsm958708323 closed 5 months ago

gsm958708323 commented 5 months ago

image image

ALEXTANGXIAO commented 5 months ago

此处 GC 来源是 Action 的 delegate 的 Combine.这个无法避免,不存在一帧 同时 10000 次的同时监听和发送事件的真实情况,事实上也才 system 的 Action delegate.Combine 10000 次也才2.5mb。完全不存在 gc 严重的说法哦。测试用例非正常,gc 理解也不对。

gsm958708323 commented 5 months ago

每次监听都会创建一个EventDelegateData对象,为啥没用池处理

ALEXTANGXIAO commented 5 months ago

理一下事件,GameEvent是全局事件,默认是给系统级的使用,只会在初次AddEventListener的时候创建EventDelegateData。移除监听并不会释放EventDelegateData,已经创建过的则不会再创建所以设计师可以不需要用池,属于空间换时间。如果是局部单位大量需要AddEventListener使用ActorEventDispatcher。

gsm958708323 commented 5 months ago

感谢解答疑惑