IT教程 ·

UnityTips:不要在公布版本中实现OnGUI方式

JMeter之If Controller深究二

0x00 问题

不知道人人是不是在调试Unity运用机能的时刻发明过一条罕见的Marker:UIEvents.IMGUIRenderOverlays。

许多情况下,这条叫做UIEvents.IMGUIRenderOverlays的Marker下会有延续的GC内存分派以及CPU时候的开支。如下图所示:

UnityTips:不要在公布版本中实现OnGUI方式 IT教程 第1张

能够看到在这个截图中,UIEvents.IMGUIRenderOverlays的GC分派为368B,时候开支为0.27ms,并且是每帧延续云云的输出。

0x01 缘由

一旦发明UIEvents.IMGUIRenderOverlays中花费了大批的主线程CPU时候以及GC分派,这就表明在项目的代码库中的某处运用了Unity的立即形式GUI体系:即便是在代码库中仅涌现一次OnGUI要领,也会致使IMGUI体系在游戏运行时举行初始化和处置惩罚。
主要的是IMGUI异常低效,不适合生产代码。

void OnGUI() { if(GUI.Button(new Rect(100, 100, 100, 100), "Load UI")) { //TODO } }

检查一下我们的项目,果然在一个测试剧本中发明了一个OnGUI要领的完成。Ok,如今我们把OnGUI要领解释掉再来看一看Unity Profiler供应的数据。

UnityTips:不要在公布版本中实现OnGUI方式 IT教程 第2张

能够发明,去掉了OnGUI要领以后,UIEvents.IMGUIRenderOverlays的开支从之前的每帧GC分派368B降到了0B,CPU的时候开支从0.27ms降到了0.01ms。
假如点开UIEvents.IMGUIRenderOverlays的内容,能够看到一个叫做GUI.Repaint的Marker,这个Marker所对应的Unity的底层要领会网络一切完成了OnGUI要领的剧本,对这个OnGUI要领的完成举行绘制。

能够看到,针对OnGUI的运用不单单议不易于保护代码的可读性,以至是大概会引起不必要的开支,哪怕只要一个OnGUI的完成不小心随宣布版本一同宣布都邑带来这类开支。

因而一个小发起是,人人能够在项目的代码库中搜刮OnGUI要领并手动删除它们,或经由过程运用适宜的#if预处置惩罚语句将它们包起来,以确保将它们从宣布构建中移除。

 

 

Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib,RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)

参与评论