zoukankan      html  css  js  c++  java
  • 内存管理记录

    1.色阶问题

    由于ETC、PVRTC等格式均为有损压缩,因此,当纹理色差范围跨度较大时,均不可避免地造成不同程度的“阶梯”状的色阶问题。因此,很多研发团队使用RGBA32/ARGB32格式来实现更好的效果。但是,这种做法将造成很大的内存占用。比如,同样一张1024x1024的纹理,如果不开启Mipmap,并且为PVRTC格式,则其内存占用为512KB,而如果转换为RGBA32位,则很可能占用达到4MB。所以,研发团队在使用RGBA32或ARGB32格式的纹理时,一定要慎重考虑,更为明智的选择是尽量减少纹理的色差范围,使其尽可能使用硬件支持的压缩格式进行储存

    2.贴图

    尽量关闭mipmap。Mipmap旨在有效降低渲染带宽的压力,提升游戏的渲染效率。但是,开启Mipmap会将纹理内存提升1.33倍。对于具有较大纵深感的3D游戏来说,3D场景模型和角色一般是建议开启Mipmap功能的,但是UI纹理也开启了Mipmap功能。这其实就没有必要的,绝大多数UI均是渲染在屏幕最上层,开启Mipmap并不会提升渲染效率,反倒会增加无谓的内存占用

    3.图片尺寸控制

    图片资源在游戏中会大量频繁地使用,而图片在内存中是按照2的幂次方来加载的,例如一张大小是20*20像素的图片,在程序运行中是按照32*32来处理的,而且从磁盘上加载每一张图片都属于IO操作,非常耗费CPU时间,尤其是在Android的低端设备上。所以通过图片打包工具(例如TexturePacker)把多张小图片合并到一张大图里,可大大减少IO操作,有效地减小内存占用,提高加载速度。

    4.压缩图片

    图片也是占用内存和包体积最多的资源,例如一张大小是1024*1024像素、格式为RGBA8888的图片,每个像素占4个字节,则该图片所占的内存就是1024*1024*4,即4MB,如果这张图片没有半透明色,可以把它转换为RGB565或RGB5551,这样每个像素只占2个字节,画质没降多少,但该图片所占内存降了一半,即1024*1024*2=2MB。或者图片对画质要求不高,可转换为RGBA4444,同样能节省一半内存。另外使用第三方工具(如ImageAlpha)对图片进行压缩,可在基本不损画质的情况下,减小图片大小

    5.CPU优化

    减少Drawcall。(参考上一篇文章“对Drawcall的理解”)当然为了降低Draw Call将大量UI元素拼合在一起,虽然渲染开销下降了,但UI重建的开销却大大提升了,这样也是不行。所以要有一个合理的度,不一定是越低越好

    6.UI设计

    尽可能将动态UI元素和静态UI元素分离到不同的UIPanel中(UI的重建以UIPanel为单位),从而尽可能将因为变动的UI元素引起的重构控制在较小的范围内

    7.编码问题

    (1)高频率地 New Class/Container/Array等。不要在Update或较高调用频率的函数中开辟堆内存,这会对项目内存和性能均造成非常大的伤害,而且尽量把相关的逻辑尽量放在一个update中,或者采用事件驱动,只有当该事件确实发生后才去执行相关逻辑,这些都可以减轻cpu的负担,提高游戏性能。

    (2)Log的输出进行严格的控制,仅保留关键Log,以避免不必要的堆内存分配。

    8.缓存管理

  • 相关阅读:
    SoundTouch
    80211
    netsh wlan
    jest--cmd
    必须精通nuxt了,不可变,to thi
    bili实际的ssr
    vscode 调试vuetify
    【Java】 第四章 异常处理 Notes learn Ma
    Windows 下的符号链接 小示例
    Java 第一二章 配置基础 与 java 数据类型
  • 原文地址:https://www.cnblogs.com/xyptechnology/p/10042647.html
Copyright © 2011-2022 走看看