首页 > 系统相关 >Unity性能分析(三)内存分析

Unity性能分析(三)内存分析

时间:2024-04-30 15:23:17浏览次数:29  
标签:分析 使用 分析器 视图 Profiler Unity 内存 Memory

Unity中有两种分析内存的方法:

  • Memory Profiler :内置的分析器,提供内存使用的基本信息。
  • Memory Profiler package:将package添加到项目中,更详细地分析内存使用情况。可以存储和比较快照查找内存泄漏,查看内存布局以查找内存碎片问题。

确定物理RAM限制

每个目标平台都有一个内存限制,以此为应用程序设置一个内存预算。使用内存分析器查看捕获的快照。硬件资源(下图)显示RAM和VRAM的大小。这个数字不是基于真实统计的,不是所有空间都可用于使用,它只提供了一个基准数字。

为每个目标平台的确定最低支持规格

为每个平台确定RAM最低规格的硬件,来指导内存预算。请记住,并不是所有的物理内存都可用。考虑使用一个百分比(例如80%)来进行内存分配。对于移动平台,还可以考虑将规格分成多个层次,以支持高端设备获得更好的品质。

内存分析器模块的简单和详细视图

内存分析器模块提供两个视图:简单视图和详细视图。使用简单视图获得内存使用情况的总览图。必要时,切换到详细视图进行深入分析。

使用内存分析器快速收集与资源和场景对象内存分配相关的信息

简单视图

Total Used Memory是Unity跟踪的总内存,不包括Unity保留的内存(Total Reserved Memory)。系统使用内存是操作系统认为应用程序正在使用的内存。如果此数字始终显示为0,这表示Profiler计数器在当前正在分析的平台上没有实现。在这种情况下,最好依赖Total Reserved Memory。同时建议切换到本平台的分析工具以获取详细的内存信息。

详细视图

如果要查看可执行文件、DLL和Mono虚拟机使用了多少内存,逐帧查看内存数据是不够的。使用详细快照来深入分析内存分布。

使用捕获的样本分析详细信息,例如可执行文件和DLL的内存使用情况

使用Memory Profiler package进行深入分析

Memory Profiler package可用于进行更详细的内存分析。使用它来存储和比较快照,以查找内存泄漏或查看内存布局以找到优化方向。 Memory Profiler package的一个巨大优势是,除了捕获本机对象,它还允许查看托管内存,保存和比较快照,并以更详细的方式浏览内存,以可视化内存使用情况。

Memory Profiler主视图

另外,也可以使用内存分析器模块中的详细视图来深入了解内存树,找出使用最多内存的内容。

内存分析器的许多功能已被Memory Profiler package取代,但仍然可以使用它辅助内存分析。 例如:

  • 查找GC分配
  • 快速查看堆的使用/保留大小(较新版本的内存分析器)
  • 着色器内存分析(较新版本的内存分析器)

在分析内存时需要考虑以下一些要点:

质量级别、图形层和AssetBundle变量等设置可能在高端设备上具有不同的内存使用情况。例如:

  • 质量级别和图形设置可能会影响shadow map的RenderTextures的大小。
  • 分辨率缩放可能会影响屏幕缓冲大小、RenderTextures和后处理效果。
  • 纹理质量设置可能会影响所有纹理的大小。
  • 最大LOD可能会影响模型等。
  • 如果您有类似于高清(High Definition)和标准(Standard Definition)版本的AssetBundle变量,并根据设备规格选择使用,也可能会获得不同的资源大小。
  • 目标设备的屏幕分辨率将影响用于后处理效果的RenderTextures的大小。
  • 设备的图形API可能会影响着色器的大小,这取决于API对其变体的支持情况。

标签:分析,使用,分析器,视图,Profiler,Unity,内存,Memory
From: https://www.cnblogs.com/flamesky/p/18168068

相关文章

  • Unity性能分析(四)Unity性能分析工具使用
    使用Profiler按照以下步骤开始使用UnityProfiler:在进行分析时,必须使用开发版本。File>BuildSettings>DevelopmentBuild。勾选AutoconnectProfile(可选)。注意:AutoconnectProfile会增加初始启动时间。如果不启用AutoconnectProfiler,可以随时手动连接正在运行的开发版......
  • Unity游戏框架设计之场景管理器
    Unity游戏框架设计之场景管理器简单介绍在游戏开发过程中,我们经常对Scene进行切换。为了不使场景切换时造成的游戏卡顿,可以Unity官方API利用协程的方式异步加载场景。同时,为提升Scene切换的玩家体验,我们经常会在场景切换的开始,先显示过渡UI,然后才对目标场景进行加载......
  • 【小程序逆向专栏】某润选房小程序逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • openGauss 内存表特性
    内存表特性MOT介绍使用MOTMOT的概念附录详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 内存优化表MOT管理
    内存表特性MOT介绍使用MOTMOT的概念附录详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • selenium 未即时关闭引起的内存泄漏 差点死机
    seleniumwebdriverfirefox测试自动登录获取token,测试可以达到目的。然后日常摸鱼后发现浏览器快卡死了,切tty看top,任务没跑多少,内存倒是快榨干了,这不合理,也没有跑什么大内存程序,先把bt、sync给kill了,内存情况也没有太好转,于是看下内存占用,然后找内存占用高的进程,把这些占用高......
  • linux 系统调用分析
    一、linux系统调用介绍linux系统调用是linux为用户空间与内核空间交换提供的一组标准API,这些api能够让用户态进程访问内核代码,从而实现系统资源、硬件、文件读写的访问。需要注意的是,系统调用是用户态进入内核态的唯一入口,为了保证linux内核运行的稳定性,用户程序不能随意的访问内......
  • k8s限速队列使用场景分析
    场景1:add->add->get->getpackagemainimport( "fmt" "k8s.io/client-go/util/workqueue")funcmain(){ queue:=workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()) queue.Add(100) queue.Add(100) v,_......
  • 社会网络分析及其Python实现
    社会网络分析(SocialNetworkAnalysis,SNA)在人类学、心理学、社会学、数学以及统计学等领域中发展起来,是综合运用图论、数学模型来研究社会行动者之间的关系或通过这些关系流动的各种有形或无形的东西,如信息、资源等,近年来逐渐成为一种热门的社会科学研究方法。社会网络分析旨在......
  • Unity游戏框架设计之任务管理器
    Unity游戏框架设计之任务管理器简单介绍在游戏开发中,我们可能会遇到下述需求。当角色的生命值减少时,我们需要让角色播放受伤动画,让系统播放角色受伤音效,将当前的新的生命值更新到UI上等等操作。如果在角色的代码中直接实现上述的操作,则将导致代码的高度耦合,不利于后期的维护和......