场景是我们有一个暴露事件的类,大约有250个注册到该事件(游戏地图上的每个关卡对象都注册到该事件):
// Every level registers itself (around 250 levels)scoresDataHelper.OnscoresUpdate += HandleOnscoresUpdate;
在销毁此场景时,每个对象都会从事件中取消注册:
scoresDataHelper.OnscoresUpdate -= HandleOnscoresUpdate;
当使用内置的分析器时,我看到了巨大的内存分配,深入挖掘表明这是由于代表未注册.
我怀疑这是因为Delegates是不可变的,当它们链接在一起时,会创建新的实例吗?
这是Unity的分析器截图:
在处理大量事件订阅时,有没有办法避免这些内存分配?
解决方法 正如您在 comments中确认您要取消订阅所有活动订阅一样,没有理由逐个取消订阅.您可以将事件设置为null.这将取消订阅事件中的所有内容而不分配任何内存.
this.OnscoresUpdate = null;
需要注意的一点是,您无法从scoresDataHelper类外部执行此 *** 作.它必须在scoresDataHelper类中.
总结以上是内存溢出为你收集整理的从C#中的事件取消注册委托时的高内存分配全部内容,希望文章能够帮你解决从C#中的事件取消注册委托时的高内存分配所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)