技术分享连载(四)

简介:

内存管理

Q1:System.ExecutableAndDlls占内存巨大,且一直在增长,这个属于正常情况吗?

System.ExecutableAndDlls该项显示的是执行文件和所调用的库(物理、渲染、IO等系统库)的总和。开发团队不用太担心该选项的数值,因为很多应用均在共用这些库,并且它对于真实项目的内存压力非常小,几乎没有影响,而且OS也不会因为该内存而杀掉游戏或应用。


内存管理

Q2:已经预加载怪物,然后显示怪物 PSS上升,并且在隐藏怪物后并没有下降,这是什么原因导致?显存上去了吗?

仅仅隐藏怪物的话,内存是不会下降的。因为隐藏只是改变了GameObject的状态,并没有对内存中的Object和资源进行移除。同时,即使是提前加载了怪物,也依然可能存在以上问题,因为某些资源是在显示的时候,才会传输一份到GPU的,比如Mesh。一般情况下,显存都不会即刻降低,这个是由Graphics Driver来管理的。建议可以看Profiler是否增长,如果Profiler没有问题而PSS持续增长,就有可能发生了内存泄露。

对于这个问题,建议查看性能优化,进无止境---内存篇(下)加深理解。


内存管理

Q3:我们在美术制作时做了40根骨骼,但在动作中仅用到了其中的30根。这种做法和30根骨骼用到了30根相比,在蒙皮计算上会明显增加吗?(Animation经过了压缩处理)

理论上是有增加的,骨骼运算均是每个骨骼阶段的Matrix乘起来的,所以理论上会有开销。建议使用Optimize GameObejct选项,可以减少一些不必要的CPU开销。


资源管理

Q4:Unity对Dynamic Batching的数量是否有限制?或者说对Saved by Batch的数量是否有限制?

Unity对于任何Mesh的面片都有65536的个数限制,拼合后的面片数也是如此。


内存管理

Q5:不太明白Profiler中ManagedHeap.UsedSize是什么,以及这个参数的意义何在?是否重要?

ManagedHeap.UsedSize是项目逻辑代码在运行时申请的堆内存,该选项只能通过优化代码来进行降低。 优化方法一般如下:

  • 尽可能地复用变量,减少new的次数;
  • 使用StringBuilder代替String连接,使用for代替foreach;
  • 对于局部变量或非常驻变量,尽可能使用Struct来代替Class。

ManagedHeap.UsedSize过大,一方面可能会影响一次GC的耗时;另一方面也可能反映出脚本中不合理的GC Alloc。





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

目录
相关文章
|
9月前
|
设计模式 前端开发 JavaScript
前端周刊-2018年9月第三期
前端周刊-2018年9月第三期
56 0
|
8月前
|
人工智能 并行计算 安全
10 大演讲主题、14 位技术大咖!龙蜥大讲堂 9 月直播预告硬核来袭
今天4点,一起探讨基于Intel TDX部署云上人工智能方案。
|
监控 前端开发 架构师
文初技术分享【转】
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。
422 1
|
Linux 开发者 芯片
有奖征文啦!聊一聊 2021 我与 OpenAnolis 龙蜥社区的那些事儿
大家可以尽情表达自己的声音,将自己参与开源贡献和社区共建过程中的感悟和收获成长分享出来。
有奖征文啦!聊一聊 2021 我与 OpenAnolis 龙蜥社区的那些事儿
|
机器学习/深度学习 人工智能 运维
开发者社区精选直播合集 | 架构师成长秘籍
架构师是一个十八般武艺都会的岗位,本专栏我们从思维方式、方法论,实践案例、大咖成长经验等角度整理视频合集,给你带来架构师成长营养餐,为你披荆斩棘、教你如何升级打怪,避开弯路成为一名优秀的架构师,快来看看收藏~
454 0
开发者社区精选直播合集 | 架构师成长秘籍
|
开发者 物联网 人工智能
峰会大咖演讲实录第二弹来啦! | 开发者必读(032期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
1972 0
|
图形学 开发者 算法
|
图形学 Android开发 iOS开发
|
Java 图形学 索引