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

unityprofiler各记录函数

时间:2022-08-17 15:58:54浏览次数:62  
标签: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,内存,加载
From: https://www.cnblogs.com/mcyushao/p/16592720.html

相关文章

  • 记录一个i变量引发的事故
    概述近期开发中遇到一个特别的问题,觉得很有必要与你下来。就是由于在开发中一个很小的疏忽,导致了很大的问题,是什么呢?现象我的程序突然引发了v8内部的错误,提示都是c++的,......
  • 记录:excel导入导出js-xlsx,处理合并
    效果前情提要后端传excel坐标数据,前端自己处理模板,找资料后,选择直接载入xlsx方式。准备工作npmixlsximport*asXLSXfrom'xlsx'导入提取数据letreader......
  • 静态构造函数
    1.静态构造函数用于初始化类中的静态数据或执行仅需执行一次的特定操作。2.静态构造函数将在创建第一个实例或引用类中的静态成员之前自动调用。3.静态构造函数具有以下特......
  • SQL聚合函数:
    聚合函数:AVG(表达式)返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。COUNT(表达式)返回表达式中非NULL值的数量。可用于数字和字符列。COUNT(*)返回表中的行......
  • oracle相关记录
    基于11g安装,仅需注意在口令管理界面,修改sys和system的口令并放开scott账号并设置口令如果使用sqldevelop,需要指定oracle安装目录下的jdk路径plsql的使用:只有32位版......
  • http 请求 Cros 跨域问题记录(转)
    前言当发起请求前端所在的域名跟后端所在域名不在同一个Origin,或者前端请求了不在当前域名下的各种资源,都会有跨域问题。跨域问题主要是在资源提供方配置跨域,即后端服......
  • Git之清除历史记录操作
    近期公司需要将之前代码仓库中的提交记录都清理,所以操作一下,记录一下步骤:安全考虑:有时候在提交代码时,不小心提交了敏感数据,如账号密码什么的,这样在历史记录中就可以......
  • ABAP开发奇葩BUG记录: SUBMIT AND RETURN 不生效
    项目需要创建大量数据并预处理来进行测试,Team里用的是三哥的一个report去创建单个数据。三哥的程序很简单,就是个选择屏幕,输入一些值,然后做主数据,然后alv显示出来。于是我......
  • 欧拉函数
    1欧拉函数定义在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(to......
  • linux-0.11分析:进程初始化函数init(),第一部分setup((void *) &drive_info) ,第十一篇随
    进程的初始化函数,init()先看看这个函吧:voidinit(void){ intpid,i; setup((void*)&drive_info); (void)open("/dev/tty0",O_RDWR,0); (void)dup(0); (void)......