lys*_*cid 3 c# mono unity-game-engine
我们正在开发一个使用Unity3D引擎的游戏(它使用Mono作为用户代码 - 我们的代码是用C#编写的).
场景是我们有一个暴露事件的类,大约有250个注册到该事件(游戏地图上的每个关卡对象都注册到该事件):
// Every level registers itself (around 250 levels)
ScoresDataHelper.OnScoresUpdate += HandleOnScoresUpdate;
Run Code Online (Sandbox Code Playgroud)
在销毁此场景时,每个对象都会从事件中取消注册:
ScoresDataHelper.OnScoresUpdate -= HandleOnScoresUpdate;
Run Code Online (Sandbox Code Playgroud)
当使用内置的分析器时,我看到了巨大的内存分配,深入挖掘表明这是由于代表未注册.
我怀疑这是因为Delegates是不可变的,当将它们链接在一起时,会创建新的实例吗?
这是Unity的分析器截图:

在处理大量事件订阅时,有没有办法避免这些内存分配?
正如您在评论中确认您要取消订阅所有活动订阅一样,没有理由逐个取消订阅.
您可以将事件设置为null.这将取消订阅事件中的所有内容而不分配任何内存.
this.OnScoresUpdate = null;
Run Code Online (Sandbox Code Playgroud)
需要注意的一点是,你不能从ScoresDataHelper课堂外做这件事.它必须在ScoresDataHelper课堂内.
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |