其他
UnityEvent与C#事件系统性能对比
首先来看一下C#的event:
现在开始对比C# event和UnityEvent。首先看一下向它们添加监听函数的内存消耗状况,以下是一小段测试脚本:
一开始C# event产生的内存垃圾比UnityEvent少,但是从添加第二个监听函数开始就比UnityEvent多了,随着监听函数的增多,二者之间的差距也越来越大。所以说如果你只注册不超过一个监听函数的话,可以使用C#的event。如果需要注册更多就可以使用UnityEvent(产生的内存垃圾较少)。
那么事件触发情况又将是怎样的?下面提供了一个测试程序,其中分别触发了带有两个监听器的不同事件系统:
同样,使用Unity编辑器中的Profiler面板查看结果:
注意:UnityEvent只会在首次触发事件时产生垃圾,之后便不会再产生垃圾。
最后测试一下触发一组事件的性能情况。因为直接测试的结果数值很小不直观,所以接下来的测试会分别对带有0,1,2个参数的事件分别触发1000万次以做观测。
2.3 Ghz Intel Core i7-3615QM
Mac OS X 10.11.2
Apple SSD SM256E, HFS+ format
Unity 5.3.1f1, Mac OS X Standalone, x86_64, non-development
640×480, Fastest, Windowed
结果如下:
C#的event在所有的批量测试上都优于UnityEvent,而且触发事件越多,差距越大。最好情况下,UnityEvent花费的时间是C# event的2.25倍,但最坏情况则达到了40倍。
如果仅从性能角度出发,选择C#内置的event较为合适。但考虑到方便编辑简化流程且同时支持跨平台,则选用UnityEvent更恰当。
以上对比分析来源于:jacksondunstan.com
原作者:Jackson Dunstan
近期Unity官方将在北京和上海分别举办两场线下活动,为大家分享独立游戏制作经验以及系统的Unity技能培训。
如果您是开发者(点击活动名称报名):
活动时间:6月4日
活动地点:北京
如果您是院校老师(点击活动名称报名):
欢迎参与:Unity官方教育培训
活动时间:6月14日 - 6月16日
活动地点:上海
我们还会分享更多Unity相关的性能分析内容在Unity官方中文论坛(forum.china.unity3d.com),请保持关注!