Unity内存分析
来源:互联网 发布:广州plc编程招聘信息 编辑:程序博客网 时间:2024/05/27 20:53
转载自:http://forum.china.unity3d.com/thread-1091-1-1.html
Used Total和Reserved 均是物理内存,其中Reserved是unity向系统申请的总内存,Unity底层为了不经常向系统申请开辟内存,开启了较大一块内存作为缓存,即所谓的Reserved内存,而运行时,unity所使用的内存首先是向Reserved中来申请内存,当不使用时也是先向Reserved中释放内存,从而来保证游戏运行的流畅性。
一般来说,我们均建议尽可能地控制Used Total的大小,Used Total越大,则Reserved Total越大,而当Used Total降下去后,Reserved Total也是会随之下降的(但并不一定与Used Total同步)。
通过PSS来查看移动端的内存是相当不准确的。Profiler记录的是通过引擎分配的真实物理内存,而PSS中多出的内存大致分为两部分,一部分是App在运行会调用底层的一些核心库,这些库都会占用一定的内存;第二部分则是移动系统决定的,即虽然游戏中已经将资源卸载掉,但在系统层面上,系统并不会及时将其清除,而是将其缓存住,这样做的处理是为了便于以后该资源的复用效率,同时,当系统的内存分配达到上限时,系统本身会调用内存清理机制来轮询这些缓存区域,进而释放内存。
ManagedHeap的内存值是由所写的C#代码来引起并造成的,建议时刻关注CPU Profiler中的GC Collcet值,查看由哪些选项分配较大或不断分配GC Allocation。这个是造成ManagedHeap不断增大的原因。
GfxDriver可以理解为GPU显存开销,主要由Texture,Vertex buffer以及index buffer组成。所以尽可能地减少或释放Texture和mesh等资源,即可降低GfxDriver内存。
ManagedHeap的大小与你的GameObject数量、资源量无关,仅是你的代码造成的。
如果是在Editor中运行时,那么该数值是会比较大,因为编辑器运行游戏时,底层会做很多额外的事情,比如更多的log输出等,从而占据较多的堆内存。
而如果在真机运行时看到该数值时,那么80M是比较大的,这个需要你对你的代码来进行优化,避免一些不必要的堆内存分配。比如,不要总是new一个class、array、container等等。你可以在CPU Profiler中的GC Alloc处查看游戏每帧的堆内存分配。
同时,Managedheap的大小完全是有Mono来决定的,用户所写的任何脚本均是由Mono来负责解析。同时,Mono的堆内存是只升不降的,这是Mono的一个问题,Unity暂时也无法对其进行修改。因此,只能建议开发者在编写代码时尽可能地优化嗲吗,避免不要的堆内存分配。
- Unity内存分析
- Unity Profiler内存分析
- Unity内存申请和释放 科学分析
- 详解Unity Profiler内存分析问题
- 详解Unity Profiler内存分析问题
- 详解Unity Profiler内存分析问题
- 详解Unity Profiler内存分析问题
- unity 内存
- Unity手游iOS内存分析和测试
- Unity手游iOS内存分析和测试
- unity优化《二》--Texture图片空间和内存占用分析
- 【Unity】 WebGL开发中的内存分配问题(分析Unity堆数据)
- 【Unity】Unity Profiler 性能分析
- unity的内存管理
- unity内存管理
- unity图片内存优化
- Unity的内存优化
- Unity 自动内存管理
- opencv3.0.0编程遇到的问题
- Xcode下的DerivedData文件
- 自定义PageControl图片
- 虚拟机kali2.0安装bettercap问题
- 解决libc++abi.dylib: terminate_handler unexpectedly threw an exception(1)
- Unity内存分析
- 韦东山第三期视频监控mjpg_streamer实验的注意事项--最终能看到结果
- sqlserver还原master和msdb
- 本地推送
- linux awk命令入门
- android中src和background区别
- ionic-项目目录结构介绍
- IOS各种调试
- 第十七周-课程设计-智力迷宫游戏开发