内存占用:
总内存峰值(MB):项目运行时Unity引擎所统计的真实物理内存分配,这里并不包含系统缓存和第三方库的自身分配内存。
推荐值:< 150MB
GFX内存峰值(MB):项目运行时用于渲染的资源所占用的内存,该值为底层显卡驱动所反馈的内存分配量。一般来说,该部分内存占用主要由渲染相关的资源量所决定,包括纹理资源、Mesh资源、Shader资源以及解析这些资源的相关库所分配的内存等。
推荐值:< 80MB
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内存。
资源使用:
ARPG走势,在切场景时,进行资源大量的加载,在回主城时进行卸载,需保证资源没有泄露;
在主场景,全部都是UI时,纹理占用内存最多;
纹理资源:
内存峰值(MB):表示纹理资源在使用过程中的内存最大量。建议结合运行截图来判断内存使用是否合理。
推荐值:< 50MB
网格资源:
内存峰值(MB):项目运行过程中,网格资源的内存占用峰值。建议结合运行截图来判断内存使用是否合理。
推荐值:< 20MB
推荐文章链接: