有关项目的内存优化(1)

最近时间比较紧,所以有关项目中的优化,特别是内存优化,一直没来得及做好,本来想找一个机会彻底处理好的,看能只能等下个阶段处理好这种问题了。我们开发产品的时候,会发现兼容性是一个比较大的问题。产品不可能说仅仅兼容最新的设备,例如iphoneX或者安卓7.0。事实上考虑到很多用户的实际情况,很多用户使用的还是2014年的ipad mini而不是ipad

air。


在此情况之下,我也清楚某些比较old设备的情况了,我们一起看一下各个苹果设备的内存限制情况:


设备                      内存                       建议内存

Ipad mini1                512M                        170-180M

Ipad mini2                1024M                       320-450M

Ipad1                     256M                        40-80M

Ipad2                     512M                        170-180M


这里并没有贴上iphone1,iphone2,iphone3设备的内存以及建议内存,毕竟这些设备的使用量几乎被后面的iphone6,iphone7,iphone8替代了,不过ipad mini系列的使用量还是比较大的,即使是2014年,2015年的产品使用量还是有的。因为这个问题,所以项目必须做一次内存优化。


内存优化要做的要点有:


第一点:plist图集文件的集中使用。这里说明的意思是,图集资源必须某一个仅仅支持某个UI,而不是说,UI加载了该图集,但是该图集存在其他的不需要用到的资源。例如a.json,a.csb,我们用到了a.plist中的50个文件,但是事实上里面有100个小图组成的大图,这样加载到内存中的plist以及对应的图集文件,消耗了一倍的内存,但是用到的却不及一半,如此下去内存急速增长,所以设备会撑不住,直接黑屏。


第二点:缓存的使用,应该谨慎。这次要优化的主要也是缓存。缓存使用得好,那是巧妙,使用得不好,内存同样会急剧飙升。我平时有注意到,有一些图集资源是长期加载到内存张的,并没有释放。但是即使是这么一点的内存不释放,引起的后果也是惊人的,由于其他的图集渲染很厉害,最后整个消耗的内存非常厉害,于是在比较老的设备上面出现问题,所以这也要是要优化的方向。那么实际上我们到底应不应该使用缓存呢。


就这一点,缓存的使用肯定是有价值的,例如切换纹理,例如精灵帧的缓存,又如动画的缓存,我们使用到这些缓存技术,主要是为了在一些复用的地方,又或者数组的地方,可以实现复用。最现实的意义是,切换纹理,又或者精灵帧的复用,可以一次性直接从内存中读取精灵块,而不用一个一个的创建,速度快了很多,渲染也快了很多。可以在一定程度上面降低GPU和CPU的内存占用。当然这些是建立在可靠的加载和释放的情况下,如果出现大时间段内的不释放,那么内存出现问题,也是常见的,所以最后的方案是:按照场景进行预加载需要的缓存,需要的时候,就使用,不需要的时候,就主动释放。具体的时机就是:OnEnter进行加载,OnExit进行释放掉,这样就可以实现内存的有效管理了。目前项目中,存在的缓存是一次性加载到内存中,考虑到高效性,所以并没有按照场景进行阶段性的释放和加载,这是这次优化必须做的。


第三点:要谨慎使用ImageView,精灵,按钮。我们知道使用渲染的消耗单位,精灵是1单位,ImageView是2单位,按钮则是3单位。不能因为渲染的差距不大,就可以频繁使用按钮或者ImageView,基本上内存需求太多就是因为精灵,ImageView以及按钮的使用不当造成的。这个时候,我们可以考虑的方案是,如果必须要有触摸效果,我们可以采用代码实现按钮的一些效果,而不是直接去使用按钮。多一些渲染单位,对内存的需求就增多了,自然也就容易黑屏崩溃了。


第四点:扁平节点设计。扁平的节点设计,这个比较重要,我们最好不要建立太多的图集或者文件的读取目录,相反应该追求尽可能在一个地方读取。虽然管理起来并不方案,但是对于渲染而言,速度却快了很多!另外一点,图集的复用性,图片的复用性。不要总是把某些类似的图片或者图集进行重复的制造轮子。不能因为类似的功能在两处不同功能的地方,就使用两次类似的文件,这样不对,不仅加载了内存的消耗,同时也加大了资源的消耗,造成了资源管理的不方便。要尽可能少的进行文件读取,次数越少越好,减少CPU的文件读写操作消耗的内存。在UI设计设计方面,尽可能扁平化,不要设计太深的节点。当然这一点我们知道,但是行动起来总是忘记了,其实很多时候还是因为为了追求自认为合理的结构,所以就加深了层次结构,这是要改善的地方。


以上四点是内存优化过程中的一部分。第四点则是多个内存优化的集合。后面会继续讲解内存优化,花较多的篇幅说明内存优化的过程和详细细节。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容