其他分享
首页 > 其他分享> > unityprofiler各记录函数

unityprofiler各记录函数

作者:互联网

EarlyUpdate.UpdatePreloading

Loading.UpdatePreloading :在异步加载/卸载场景,异步加载AssetBundle,加载AssetBundle中的Asset,加载Resource文件夹中资源,调用UnloadUnusedAssets时会产生这个tag.如果加载操作要求等待完成,则会在子tag中看到AsyncOperationComplete, 否则在子tag中会看到IntegrateAssetsInBackground

UpdatePreloading:根据加载线程的优先级取得可用时间片,在时间片耗尽前,尝试最多次的加载资源。每次加载资源会产生一次kPreloadSingleStep tag。Unity Preloading的线程可用时间片每次为4ms。

 Preload Single Step:每次执行时,先确保preload manager线程已经启动,然后尝试向显卡异步传输数据(WEBGL平台不支持这一特性)。异步上传的时间片和buffer大小默认分别为2ms和4MB的循环缓冲区。通过Quality Setting可以调整默认大小。然后查询异步加载队列中第一位的任务是否完成,以及和当前任务相关的分时整合任务是否完成。如果以上任务都执行完,会执行一起在主线程独占状态下的资源整合。
 Application.LoadLevelAsync Integrate:在加载场景时(首次加载,普通加载或者叠加加载)会出现该tag。对于普通加载场景,引擎首先会卸载场景(参见UnloadScene)然后加载新的场景。而叠加加载则会直接加载并激活目标场景中的Objects。

平均帧率项目中平均帧率。推荐值 > 25 帧

UPR优化建议:

1.查看CPU占用Top函数,从高到低开始依次分析和优化。

2.查看GC占用Top函数,GC是大部分卡顿的主要原因。

3.查看脚本所造成的性能损耗。

4.降低游戏的渲染分辨率,手机帧率低的时候,减少每一帧要处理的像素数量。

ReservedTotal

ReservedTotal峰值项目运行时Unity引擎所统计的真实物理内存分配。

对于绝大多数平台而言,Reserved Total ≈ Reserved (Unity + Mono + GFX + FMod)推荐值 < 230MB

UPR优化建议:

Unity项目中的内存占用主要由静态资源、AssetBundle 和Mono堆内存组成。

1.使用UPR资源检测工具检测项目资源。查看资源的内存占用是否合理,并且是否存在资源冗余的问题。

2.查看Mono堆内存使用的合理性:ReservedMono峰值是否超过了UPR推荐值,ReservedMono是否存在持续上升的趋势。

3. Mono堆内存占用量的主要来自于配置文件的读取和解析操作,查看配置文件读取操作的堆内存使用的合理性。

4..查看AssetBundle在内存中的驻留情况。

ReservedUnity

ReservedUnity峰值为Unity引擎自身逻辑所需要使用的内存分配,包括各模块管理类的内存占用,序列化信息、WebStream、资源的内存占用等等。推荐值 < 150MB

UPR优化建议

1. 排查是否存在AssetBundle没有被清理干净的情况。

2. Assetbundle打包的时候,如果只有一个引用的就不设置AssetbundleName。减少Assetbundle文件数量。

3. 使用SerializedFile加载Assetbundle完之后,即时Unload。

4. 对于占用WebStream较大的AssetBundle文件,使用LoadFromCacheOrDownLoad或CreateFromFile来进行替换,即将解压后的AssetBundle数据存储于本地Cache中进行使用。

5. 分析纹理、网络、动画、音频和材质等资源的内存占用性能瓶颈,针对性地进行优化。

ReservedMono

ReservedMono峰值项目运行时Mono管理和分配的托管堆内存。

对于绝大多数基于Unity引擎开发的项目而言,除iOS平台外,其托管堆内存是由Mono分配和管理的。推荐值 < 80MB

UPR优化建议

1. 关注Reserved Mono和Unused Mono,防止内存泄漏。

2. 关注堆内存分配Top10的函数,定位是否有分配不必要堆内存的代码存在。

3. 不要在Update、FixUpdate或较高调用频率的函数中开辟堆内存Class/Container/Array等。

4. 对自身Log的输出进行严格的控制,仅保留关键Log,以避免不必要的堆内存分配。

内存

Total Reserved/Used

Reserved是Unity向系统申请的总内存,但是并不包含第三方库的自身分配内存和系统缓存;Used是当前正在使用的总内存。

Unity引擎为避免频繁向操作系统申请开辟内存,因此开启较大一块内存作为缓存,即Total Reserved。

所以在运行时,Unity引擎首先是向Reserved中来申请内存,当不使用时也是先向Reserved中释放内存,从而来保证游戏运行的流畅性。

当Reserved中空内存不够用时,Unity引擎才会再次向操作系统申请开辟内存。

占据较大内存开销的是这两处:WebStream 和 SerializedFile。

WebStream :当使用new WWW或CreateFromMemory来加载AssetBundle时,Unity引擎会加载原始数据到内存中并对其进行解压,因此加载后WebStream的大小会很大。

因此,当项目中存在通过new WWW加载多个AssetBundle文件,且AssetBundle又无法及时释放时,WebStream会占用较大内存。

Mono Reserved/Used

Mono内存表示游戏中脚本分配的内存,其中游戏逻辑由开发人员编写,因此容易出现内存问题。

“托管堆内存”代表Mono“应该”自动地改变堆的大小来适应程序所需要的内存,并且定时地使用垃圾回收(Garbage Collect)来释放已经不需要的内存。

往往开发人员会忘记清除对不再需要使用的内存的引用,从而导致Mono认为这块内存一直有用,无法回收,从而造成内存泄漏。

Mono内存泄漏会使空闲内存减少,GC频繁,mono堆不断扩充,最终导致游戏内存占用的升高。

由于Mono自身的限制,其堆内存分配是 “只升不降” 的,即:Mono的堆内存一旦分配,就不会返还给系统。

最终导致内存过高,进程被操作系统Kill或者崩溃。

UI

纹理资源峰值项目中纹理资源的峰值。推荐值 < 50 MB

UPR优化建议

决定纹理资源大小的因素主要有三种:分辨率、格式和Mipmap是否开启。

1.降低分辨率,根据Game摄像机距离物体最近时,物体所占的像素大小来确定最大分辨率。

2.拆分透明通道(Alpha), 因为带Alpha通道的贴图 Unity会默认选择RGBA格式。

3.调整压缩格式,尽量选用当前平台支持的最高压缩格式。

4.禁用Mipmap。

5.启用Use Crunch Compression,Crunch是Unity支持的最新压缩格式,压缩比非常高。

标签:Reserved,函数,记录,Mono,unityprofiler,Unity,AssetBundle,内存,加载
来源: https://www.cnblogs.com/mcyushao/p/16592720.html