详解Unity Profiler内存分析问题

Unity Profiler与模拟器联调:从环境配置到性能分析实战 本文详细介绍了Unity Profiler与模拟器联调的完整流程,从环境配置到性能分析实战。涵盖Android SDK、JDK安装、ADB连接、端口映射等关键步骤,并解析Profiler中的CPU、内存和GPU数据分析技巧,帮助开发者快速定位性能瓶颈,优化Unity项目运行效率。 阅读详情

在使用Unity开发游戏的过程中,借助Profiler来分析内存使用状况是至关重要的。但许多开发者可能还对Profiler中各项数据表示的含义不甚明确,今天我们Unity官方的技术工程师柳振东,将针对Profiler内存分析相关的问题及解答,与大家进行分享。

要想完全发挥Profiler内存分析的威力,首先要做的就是了解Profiler展示的数据所表达的含义,以及到底哪些模块所使用的内存才会被统计到Unity的Profiler中。Profiler涉及到的知识点还有很多,我们今天先从中挑选一些大家常有的疑问来作解答。
1.    在Unity的Profiler中看到的总内存使用和我使用其它工具看到的系统内存占用不太一样,这是为什么呢?
Profiler中看到的内存是通过Unity自身引擎看到的内存分配,凡是引擎Allocation和Deallocation的内存,引擎均有记录,所以我们可以给出确切的引擎内存占用信息。但是,仍有其他内存我们是无法获知的。

比如,如果引擎使用了第三方库,那么库分配的内存我们是无法进行统计的。另外,在移动设备上大家看到的内存,其实都要比Profiler大很多,这是因为不管是通过Xcode的Instrument还是通过Android的USS,其记录的真实物理内存都包括两部分,一个是真实Used的物理内存,另一个则是缓存的(Cached)的物理内存。这是OS所决定的,Android和iOS系统在资源不使用时均不会立即将其进行回收,而是将其放在缓存的物理内存中,以便下次再用时,可以快速地加载。当系统发现App的内存不够用时,才会在底层调用一个memory killer线程来轮询缓存物理内存,进而为app来清理内存。而Unity Profiler记录的则是目前真实使用的物理内存,即上述所说的第一部分。因此,当游戏运行时间越长,Profiler分配内存和通过其他软件获得的系统内存差距会越大。

因此,只要所使用的第三方库不存在内存泄露问题,我们一般都建议只需要查看Profiler即可,只要Profile中的内存可以保证正常升高和回落,那么引擎这边分配的内存就是没有问题的。

2.    我们做项目的时候发现有时profiler中System.ExecutableAndDlls这项占用很多,有什么解决办法吗?
“System.ExecutableAndDlls”该项显示的是执行文件和所调用的库(物理、渲染、IO等系统库)的总和。请不用担心该选项的数值,因为很多Application均在共用这些库,并且它对于真实游戏的内存压力非常小,而且也不会导致OS因为该内存来Kill掉游戏。

3.    为什么在Profiler中的Simple模式下,Used Total的数值不等于其右边各项Unity,Mono,GfxDriver,FMOD与Profiler总和呢?
其实在Unity中,Used Total的计算公式为Used Total = Unity + Mono + GfxDriver + Profiler + additionalUsedMemory。公式中的additionalUsedMemory项在profiler中并没有显示,因为这一项一般情况下都为0,只在某些特殊发布平台下才会有数值(一般Android,PC和IOS都为0)。因此一般情况下Used Total的值就是除FMOD之外各项的总和了。当然,这个规则对于Reserved Total是同样适用的。

4.    我们项目的资源主要使用AssetBundle动态加载资源,发现Profiler中Detailed模式下PersistentManager.Remapper一项占用时多时少,这一项主要是做什么的呢?
Remapper主要提供文件的持久化存储,包括各种序列化的asset,项目的setting文件等,维护文件系统的中的文件与内存中数据的对应关系。那么如果项目大量使用AssetBundle的话,在对AssetBundle进行Unload之前都会需要占用Remapper的内存的。而Remapper本身的实现使用内存池,其数值只会增大,那么为了使Remapper占用的内存保持在一个稳定的数值上,我们需要每次在加载一定数量的AssetBundle之后进行Unload操作,而不要一次性把所有AssetBundle都加载后才调用Unload。(这样的操作对维持整个mono heap的大小也是至关重要的,因为mono heap本身也是只增大不减小的)

5.     我们在Editor中调试项目的时候发现纹理的内存大小是其本身大小的两倍,是因为Unity把内存和显存的大小都计算进去了吗?
其实并不是这个原因,因为Editor本身会保有纹理的一份内存,在Editor下进行profiler会把Editor本身所使用的纹理大小也计算进去,因此会有内存变为两倍的情况。我们官方并不建议在Editor下对项目进行性能调试,而是务必要在真机上跑编译好的项目,然后连接profiler进行调试,只有这样才能得到真正精确的测试数据。
原文地址:http://forum.china.unity3d.com/thread-16622-1-1.html
Mumu模拟器ADB连接全攻略:从手动配置到脚本自动化(附Unity Profiler调试技巧) 本文详细介绍了Mumu模拟器ADB连接的完整配置流程,包括手动设置和自动化脚本开发,特别针对Unity开发者提供了Profiler调试的实用技巧。通过端口转发和性能分析,帮助开发者高效解决移动应用调试中的常见问题,提升开发效率。 阅读详情

相关推荐

Unity IL2CPP内存泄漏追踪:基于Memory Profiler的系统化排查方案

内存泄漏是软件开发中常见的性能问题,指程序未能释放不再使用的内存,导致可用内存逐渐减少。其原理在于错误的对象引用关系,使得垃圾回收器无法识别并回收已无用的内存块。解决内存泄漏对于保障应用稳定性、防止崩溃至关重要,尤其在游戏开发、移动应用等对性能敏感的场景中。在Unity引擎的IL2CPP脚本后端环境下,内存管理变得更加复杂,涉及托管堆与原生堆的混合模型,使得传统的排查方法往往失效。本文聚焦于利用Unity官方的Memory Profiler工具,针对IL2CPP环境,提供一套从建立基线、诱发采样到对比分析和

weixin_29011239的博客 283

【unity】代码堆内存检测泄漏,使用Profiler与UWA查

下载uwa 接入uwasdk 打包安装 打开游戏,startuwa,游玩游戏 安装uwatool,上传数据

PA_的博客 4538

Unity内存泄漏排查实战:利用Profiler精准定位资源泄漏

在Unity开发中,内存管理是性能优化的核心挑战,尤其是资源泄漏问题。资源泄漏源于对已不再使用的对象(如纹理、网格、音频等)保持着意外的强引用,导致其无法被垃圾回收器(GC)或资源卸载机制释放。理解Unity内存的两大阵营——Mono托管堆与Native堆的管理原理至关重要。Mono堆依赖GC自动回收,而Native资源则需通过引用计数和显式卸载(如Resources.UnloadUnusedAssets)来管理。其技术价值在于保障应用稳定性,避免因内存耗尽导致的崩溃与性能下降。在游戏开发、移动应用等高内存

weixin_31130435的博客 236

unity优化 2

原文:https://blog.youkuaiyun.com/game_jqd/article/details/51899000 使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用。不同平台和不同硬件得到的值会不一样,可以通过修改Player Setting的Stripping Level来...

折戟 886

5G移动性管理实战:手把手教你配置NR小区重选参数(附避坑指南)

本文深入解析5G网络移动性管理中的小区重选参数配置实战。通过拆解小区选择与重选的核心机制,结合真实案例,手把手指导如何配置NR小区重选参数,并分享常见避坑指南,帮助工程师优化网络性能,提升用户移动体验。

weixin_29229261的博客 200

高德地图 搜索和点击定位

高德地图vue

weixin_45474673的博客 1943

Unity内存分析器

System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用。不同平台和不同硬件得到的值会不一样,可以通过修改Player Setting的Stripping Level来调节大小。 Ricky:我试着修改了一下Stripping Level似乎没什么改变,感觉虽占用内存大但不会影响游戏运行。我们暂时忽略它吧(- -)! G

qqaazzzqaz的专栏 1650

CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)

本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。

x8y9z0的博客 1144

Unity游戏优化指南大全(持续更新中!)

CPU Usage Profiler 模块的图表可跟踪应用程序主线程中花费的时间。这些时间被分为九个类别。要更改图表中类别的顺序,可以在图表的图例中拖放这些类别。还可以单击某个类别的有色图例以切换是否显示。该模块始终处于激活状态(即使将其关闭)Rendering: 应用程序花费多少时间来渲染图形。Scripts: 应用程序花费多少时间来运行脚本。Physics: 应用程序在物理引擎上花费多少时间。Animation。

PangPangPig123的博客 3170

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 266

【VibeCoding系列】小白入门指南:模型选择、编辑器选择、项目预定全分析

开箱即用:下载安装就能用,不用配 API Key(也可以自己配)Cmd+K 快速修改:选中代码,按 Cmd+K,直接让 AI 修改Cmd+L 对话:侧边栏聊天,支持引用文件和代码@文件引用:输入 @ 就能引用项目中的文件,AI 自动读取上下文Agent 模式:告诉 AI 一个需求,它自动跨文件修改下载地址cursor.com(免费版有额度限制,足够入门)✅下载 Cursorcursor.com),安装打开✅选一个小项目(个人名片页 or Todo List)✅按照七步工作流开干。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 212

内存分析_详解Unity Profiler内存分析问题

在使用Unity开发游戏的过程中,借助Profiler来分析内存使用状况是至关重要的。但许多开发者可能还对Profiler中各项数据表示的含义不甚明确,今天我们Unity官方的技术工程师柳振东,将针对Profiler内存分析相关的问题及解答,与大家进行分享。要想完全发挥Profiler内存分析的威力,首先要做的就是了解Profiler展示的数据所表达的含义,以及到底哪些模块所使用的内存才...

weixin_31041583的博客 384

addr2line解析不出来行号的解决方式(汇编解析高阶版)

摘要:本文针对AEC crash问题中addr2line无法解析行号的情况,通过llvm-addr2line和反汇编分析,定位到CamX::AECBEStats17::AdjustROIParams函数中的乘法溢出问题。关键发现包括: 常规addr2line只能解析到函数名但无具体行号 llvm-addr2line解析出多个可能溢出点(行196/204/211/218/270/271) 反汇编显示6个条件分支跳转到溢出处理函数 源码分析确认这些位置均存在乘法运算 最终通过汇编级调试工具成功定位UBsan报告

168

Unity性能优化实战:从Profiler工具使用到移动端专项优化

在游戏开发中,性能优化是确保流畅体验的核心环节。其原理在于通过监控和分析CPU、GPU及内存等关键模块的运行时数据,定位瓶颈所在。数据驱动的优化方法能显著提升项目的稳定性和效率,避免凭经验盲目调整。在Unity引擎中,Profiler、Frame Debugger和Memory Profiler等内置工具构成了性能分析的基石,它们分别用于剖析帧耗时、诊断渲染问题与追踪内存泄漏。掌握这些工具的组合使用,对于解决移动端发热降频、Draw Call过高及GC Alloc频繁等典型性能问题具有重要价值。本文基于Un

weixin_34007886的博客 392

分立器件---电感介绍(7000字)

电感基础整理

HW-BASE的博客 2352

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2748

Unity性能优化实战:Profiler完整定位流程与工程化诊断指南

在游戏开发中,性能优化是确保用户体验流畅的关键环节。其核心原理在于通过系统化的工具和方法,精准定位并解决CPU、GPU及内存等维度的性能瓶颈。掌握性能分析技术对于提升项目运行效率、保障应用稳定性具有重要价值,尤其在移动端和复杂场景下,能有效避免卡顿、掉帧等问题。Unity Profiler作为引擎内置的性能分析神器,提供了从CPU耗时、GPU渲染到内存分配的全方位数据洞察。通过工程化的诊断流程,开发者可以将模糊的“卡顿”现象转化为具体的代码热点与资源问题,实现精准优化。本文以Profiler实战为核心,结合

weixin_33946605的博客 360

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

告别Unity内存溢出闪退:手把手教你用Profiler和日志精准定位System out of memory

本文详细解析了Unity游戏中常见的System out of memory内存溢出问题,通过Profiler和日志分析工具,手把手教你如何精准定位和解决内存崩溃。文章重点分析了AssetBundle加载的隐形陷阱,并提供了内存优化防御性编程的五项原则,帮助开发者有效避免闪退问题。

weixin_30216561的博客 810

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Unity移动端C#资源泄漏排查与预防:四大根源与实战指南

在Unity移动端开发中,内存管理是保障应用稳定性的核心技术。垃圾回收(GC)机制虽能自动回收托管内存,但开发者常因不当的编程模式,无意中创建了无法释放的资源引用,导致内存泄漏。其核心原理在于,GC仅能回收无任何引用的对象;若存在静态引用、未注销的事件委托、活跃的协程或不当的缓存持有,对象便无法被释放。这种泄漏在内存受限的移动端危害极大,会引发频繁GC卡顿、应用崩溃或系统强杀。常见应用场景包括全局管理器、UI事件交互、异步任务和对象复用池。本文聚焦Unity移动端C#资源泄漏的四大根源——静态引用滥用、事件

weixin_33853827的博客 382

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Unity3d帧率设置及在游戏运行时显示帧率
下一篇: Unity内存优化(-)托管堆ManagedHeap的优化
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值