U3DC.COM | 优三帝研究院

Menu

优三帝ProFiler专题整理

CPU Stage:
Profiler可以自定义需要统计的代码块使用:
使用Profiler.BeginSample和Profiler.EndSample,例如:
void ProfilerTest(){
Profiler.BeginSample("ProfilerTest",gameObject);
float[] myTestFloat = new float[1024*1024];
myTestFloat[0] = 1.0f;
Profiler.EndSample();
}

Deep Profile(详细)
开启deep profile将会使原来的内容更加细致。

Drawcall
Profiler中的drawcall是广义上的drawcall,它包括:
GPU Stage切换
Clear操作
绘制调用(狭义上的drawcall):rendering模块和Game Statistics里统计的就是这种DC。
常用操作
Recored(记录或暂停)
Deep Profile(深度profiling)
Profile Editor(是否记录editor相关的开销)
Active Profiler(激活指定的目标进行profiling)
Clear(清空已有的profiler信息)
Frame(帧)

各个平台下的profiler使用
勾选Development Build 和 Autoconnect Profiler
一般情况下会自动连接,如果无法连接,可尝试在active profiler处输入ip地址进行连接。
移动设备(iOS/android):
1.在Building Setting中勾选Autoconnect Profiler 及Development Build
2.发布(打包)到目标设备(手机)上。
3.设备连接wifi,确保打包的电脑和目标设备(手机)处于同一网络下。
4.运行目标设备(手机)上的游戏。
5.editor的profiler(active profiler)选择真机设备,进行远程连接。
6.连接后即可在profiler窗口中查看profiling信息。

需要关注的参数
GC Alloc
监测任何一次性内存分配大于2KB的选项。
监测每帧都具有20B以上内存分配的选项。
Time(ms)
记录游戏运行时每帧cpu占用

常见问题
1.GPU 的presentdevice非常耗时,一般可能时使用了非常复杂的shader。
2.GPU 运行速度非常快,由于 Vsync(垂直同步)的原因,使得它需要等待较长的时间。
3.StackTraceUtility.PostprocessStacktrace()和StackTranceUtility.ExtractStackTrace()
一般是由于Debug.Log或者类似的api造成,可以在release游戏后将debug 屏蔽。
4.Overhead 一般出现在移动设备(安卓设备)。
5.尽可能避免使用gui.
6.如何查看assetbundle是否卸载干净?www.loadfromcacheondownload
7.使用for代替foreach,每个foreach会产生一个enumerator。
8.使用lambda表达式,有可能存在内存泄露的风险。
9.避免使用linq,部分功能无法在某些平台上使用,并且伴有分配大量gc alloc,每帧分配68Bytes内存。
10.开启一个coroutine分配37b内存,coroutine类实例-21b,enumerator-16b,控制startcorountine次数。
11.缓存组件,不要频繁获取。每次get,分配39b堆内存。

打赏
— 于 共写了1465个字
— 文内使用到的标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据