ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unityprofiler各记录函数

2022-08-17 16:03:54  阅读:165  来源: 互联网

标签:Reserved 函数 记录 Mono unityprofiler Unity AssetBundle 内存 加载


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有