1.Mono托管堆(C#内存)
2.Unity总体内存情况
3.针对某个对象分析内存
4.特定分析部分逻辑
5.获取记录详细数据
1.Mono托管堆(C#内存)
a.Profiler.GetMonoUsedSizeLong()获取当前使用的Mono堆内存(单位: 字节); 关注脚本(C#)对象占用的内存b.Profiler.GetMonoHeapSizeLong()获取Mono堆的总大小, 用来判断Mono内存是否接近上限c.Profiler.usedHeapSizeLong当前堆中使用的内存总量
2.Unity总体内存情况
a.Profiler.GetTotalAllocatedMemoryLong()获取所有unity正在使用的内存总量(包括Mono, Native, 图形资源等)b.Profiler.GetTotalReservedMemoryLong()返回进程向操作系统申请的内存总量, 不管是否已经用上c.Profiler.GetTotalUnusedReservedMemoryLong()返回保留了但尚未分配出去的内存部分正在使用中的内存总量 + 保留了但尚未分配出去的内存部分 ≈ Unity从操作系统申请的内存
3.针对某个对象分析内存
GameObject obj = new GameObject();Profiler.GetRuntimeMemorySizeLong(obj);
4.特定分析部分逻辑
开始一个自定义采样区段: 常用于标记性能热点段, 配合EndSample()使用; 会在Unity Profiler的CPU模块中显示为一条标记, 建议仅在开发环境使用(#if UNITY_EDITOR)
Profiler.BeginSample("MrTangCode");
for (int i = 0; i < 99999; i++)
{float x = Mathf.Sqrt(i);
}
Profiler.EndSample();
5.获取记录详细数据
将Profiler数据写入文件, 用于离线分析(比如上传给QA或分析工具); 是用于在运行时手动采集Unity Profiler的原始性能数据(.raw 文件), 这些数据可以导 Unity Profiler界面中进行离线分析; 我们一般可以在游戏中嵌入一个开启功能,采集一定时间的性能数据内容
Profiler.logFile = Application.persistentDataPath + "/myProfileData.raw";Profiler.enableBinaryLog = true; Profiler.enableBinaryLog = false;