技术分享连载(五十)

简介:

内存管理

Q1:在我的UWA性能检测报告中,纹理才占50MB,但为什么Unity内存会有300MB之多,请问这部分是怎么计算的?内存大小难道不是由资源大小决定的吗?
请输入图片描述

对于绝大多数平台而言,Reserved Total内存 = Reserved Unity内存 + GFX内存 + FMOD内存 + Mono内存。Reserved Unity为Unity引擎自身各个模块内部的内存分配,包括各个Manager的内存占用、序列化信息的内存占用、WebStream的内存占用和部分资源的内存占用等等,所以纹理资源仅是Unity引擎使用内存的一部分。除纹理资源外,研发团队还需要注意Mesh资源、AnimationClip、RenderTexture、Font资源等等,同时还需要关注AssetBundle文件在内存中的驻留情况(可在UWA报告中的“资源管理->具体AB使用情况”页面中查看),因为它可能会导致SerializedFile和Webstream内存(Unity5.3版本后不再有WebStream)的内存占用过高。


渲染优化

Q2:在Android平台上,PlayerSettings里开启/关闭Multithreaded Rendering,在性能和稳定性上有多大的区别? 一般是勾还是不勾?
请输入图片描述

就我们目前深度优化过的项目而言,Android App中开启多线程渲染确实可以在渲染模块中带来较大的性能提升,但我们并没有详细地定量分析过,所以很难给出“到底能提升多少”的定量说明。对于稳定性来说,现在市面上已经有不少Unity 5.3版本的开启多线程渲染的项目在成功运营,就目前反馈的效果来看都是不错的。所以,对于使用Unity 5.3版本以后(包括Unity 5.3)的项目,我们一般建议尝试开启多线程渲染这一选项,至于能具体提升多少,可自行在项目中进行比较。

同时需要指明的是,并不是开启多线程渲染就一定会出现质的飞越,因为我们也看到一些项目(特别是使用了UGUI的项目)在开启多线程渲染后,其半透明耗时出现了非常不稳定的运行效果,如下图所示。因此,建议研发团队在开启多线程渲染后,多进行效率对比,密切关注多线程渲染带来的效率变化。关于多线程渲染性能,我们将在3月份举办的UWA Day 2017 大会上带来更为详细的性能分析,尽情期待!
请输入图片描述


渲染优化

Q3:物体的动态合批条件和是否是透明物体没什么关系吧?比如粒子系统的物体一般都是透明的,是不是也可以合批?

动态合批并不限制物体是否为半透明或不透明物体。合批的首要要求是Material一致,其本身是半透明Material还是不透明Material均没有限制。粒子系统同样是可以合批的,只要其材质一致,深度较为接近且中间没有其他材质的物体阻隔,那么Unity引擎将会将其进行合批。关于动态合批更为详细的要求,可以查看Unity引擎的官方文档:https://docs.unity3d.com/Manual/DrawCallBatching.html


渲染优化

Q4:在UWA报告的渲染模块中,网格数和Draw Call数量都不高,但为什么不透明渲染消耗这么高呢?我该如何进一步定位并优化这个问题呢?
请输入图片描述

研发团队可以在UWA报告中查看“Camera.Render”的具体性能堆栈(高CPU占用函数列表中),通过该堆栈即可看到该项目在渲染模块中详细的性能瓶颈。
请输入图片描述
如上图所示,我们可以看到不透明渲染中,场景模型渲染耗时占了13%,蒙皮网格渲染耗时占了8%。对此,我们需要对场景的静态模型和蒙皮网格进行进一步地完善。而对于静态模型来说,在Draw Call和Triangle都很正常的情况下,其CPU占用一般来说应该是较低的。但如果较高,则建议研发团队对模型中(特别是地形)渲染Shader的采样纹理数量进行进一步检测。比如,我们经常发现一些项目中地表模型使用了4~5层混合贴图来进行渲染(T4M地形等),这些在中低端机器上往往会造成不透明渲染较高的CPU开销。对于这种情况,建议尝试降低Shader所使用的采样纹理数量。当然,以上仅为我们遇到的较为普遍的情况,如果你的项目或性能报告中也存在一些难以解释的问题,欢迎随时来跟我们进行沟通。


资源管理

Q5:关于资源冗余,我从AssetBundle中加载一张贴图后,即使Unload(false),是否还会在内存中保留一个没有被任何资源引用的贴图呢?是否非得UnloadUnusedAssets()才能把这个“僵尸”资源给卸载掉?

是的,从AssetBundle中加载资源并执行Unload(false)后,其加载出的资源如果没有被引用,那么会处于“游离”状态,即问题中所谓的“僵尸”资源。除Resources.UnloadUnusedAssets()外,Resources.UnloadAsset和AssetBundle.Unload(true)均可以将其进行卸载。





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
监控 前端开发 架构师
这一天,InfoQ 办公室为何如此热闹?|带你直击 InfoQ 开放日精彩瞬间!
过去一年,InfoQ 秉承着“推动数字人才全面发展”的使命,持续关注技术领域的变化和用户的需求,为近 500w 用户提供了好产品、好内容、好服务;新的一年,为了能更深入地了解企业、开发者以及用户的真实诉求,我们将以每月一次的节奏,与 InfoQ 的朋友们进行近距离交流。
348 0
这一天,InfoQ 办公室为何如此热闹?|带你直击 InfoQ 开放日精彩瞬间!
|
监控 DataWorks 前端开发
第十六届 D2 的第一波话题新鲜出炉啦~干货满满,不容错过!
上上个周末,有 7 位前端大佬们放弃了宝贵的休息时间,以评委的身份从白天专注到黑夜,只为给本届 D2 挑选出最优质的话题。 评委们不仅给出了前端方面的专业见解,还都秉承着一个最基本却也最核心的原则——必须能给 D2 的听众带去收益,而这,也是 D2 十几年如一日都在坚持的事情。 经过两天的精心挑选,我们激动地向大家宣布:首批 12 个话题诞生啦!我们按照专场来看看都有哪些吧~
577 0
第十六届 D2 的第一波话题新鲜出炉啦~干货满满,不容错过!
|
JavaScript 前端开发 编译器
前端周刊第七期
前端周刊第七期
|
资源调度 前端开发 JavaScript
前端周刊第五期
前端周刊第五期
|
大数据 关系型数据库 分布式数据库
聚能聊每周精选 第九期
各位社区小伙伴大家!让大家久等了,这一期来的比以往更晚一些,大家不要见怪啊!话不多说接下来我们来看看最近聚能聊里各位聊主和各位粉丝们又有哪些精彩互动,碰撞出怎样的火花,一起来回顾一下吧!!
4286 0
聚能聊每周精选 第九期
|
Android开发
聚能聊每周精选 第七期
Hello! 各位社区小伙伴大家!接下来我们来看看本周聚能聊里各位聊主和各位粉丝们又有哪些精彩互动,碰撞出怎样的火花呢,一起来回顾一下吧!!
1874 0
聚能聊每周精选 第七期
聚能聊每周精选 第五期
Hello! 各位社区小伙伴!新年长假结束了,新一年工作开始啦,接下来我们来看看长假期间聚能聊里各位聊主和各位粉丝们又有哪些精彩互动,碰撞出怎样的火花呢,一起来回顾一下吧!!
2421 0
聚能聊每周精选 第五期
|
云栖大会
图说历届云栖大会精彩内容(长图鉴赏)
从2010年至2016年,从中国地方与行业网站峰会、阿里云开发者大会到云栖大会,历经7年的不断进化,云栖大会已经成长为阿里巴巴集团技术实力和科技生态的全景展示平台,是全球最具影响力的科技展会之一。每年在云栖小镇,我们与你不见不散。更多云栖大会详情,请在本文中了解。
24731 0
|
缓存 索引 容器