从C#中的事件取消注册委托时的高内存分配
发布时间:2020-12-15 23:23:34 所属栏目:百科 来源:网络整理
导读:我们正在开发一个带有 Unity3D引擎的游戏(它使用Mono作为用户代码 – 我们的代码是用C#编写的). 场景是我们有一个暴露事件的类,大约有250个注册到该事件(游戏地图上的每个关卡对象都注册到该事件): // Every level registers itself (around 250 levels)Sco
我们正在开发一个带有
Unity3D引擎的游戏(它使用Mono作为用户代码 – 我们的代码是用C#编写的).
场景是我们有一个暴露事件的类,大约有250个注册到该事件(游戏地图上的每个关卡对象都注册到该事件): // Every level registers itself (around 250 levels) ScoresDataHelper.OnScoresUpdate += HandleOnScoresUpdate; 在销毁此场景时,每个对象都会从事件中取消注册: ScoresDataHelper.OnScoresUpdate -= HandleOnScoresUpdate; 当使用内置的分析器时,我看到了巨大的内存分配,深入挖掘表明这是由于代表未注册. 我怀疑这是因为Delegates是不可变的,当它们链接在一起时,会创建新的实例吗? 这是Unity的分析器截图: 在处理大量事件订阅时,有没有办法避免这些内存分配? 解决方法
正如您在
comments中确认您要取消订阅所有活动订阅一样,没有理由逐个取消订阅.
您可以将事件设置为null.这将取消订阅事件中的所有内容而不分配任何内存. this.OnScoresUpdate = null; 需要注意的一点是,您无法从ScoresDataHelper类外部执行此操作.它必须在ScoresDataHelper类中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |