运行性能

Q1:如下图,我们发现WaitingForJob这个函数消耗过高导致了卡顿,请问该卡顿是否由于渲染压力过大导致?

从图中看,该线程最后是在等待 Canvas.sortjob,而这是 UI 排序造成的开销(自Unity5.2版本开始,UGUI的部分计算已经移出了主线程)。
详情参考:http://blogs.Unity3D.com/2015/09/07/making-the-ui-backend-faster/
因此理论上,这是 UI 的 canvas.sortjob 在指定的时间上没有完成,从而使得渲染线程等待,且最终导致主线程进行等待而造成的开销。

运行性能

Q2:我们在查看《六龙争霸测评精讲》时,看到下图中的GC的调用,请问该数值的是取决于明式调用System.GC.Collect()这个方法吗,还是指系统自动GC的频率?

手动触发System.GC.Collect和系统触发GC都属于GC的调用。除iOS平台外,Unity项目的GC调用是由Mono来控制的。其主要有两种方式,一种是系统每隔一段时间调用一次,一种则是当堆内存分配过大过快时被触发。
每次GC调用均会造成一定程度上的卡顿,从而降低项目运行的流畅度。因此UWA测评中专设了GC调用详细检测,欢迎开发者上传项目测试!

运行性能

Q3:在报告中我们看到函数uwa-xxx是我们加的自定义代码段采样, 我们发现它们触发了很多GC, 是什么情况呢?

说明这些函数中会经常分配大量的堆内存 。GC是Mono来控制的,当Mono认为累积堆内存较高时,它就会调用GC。同时,哪个函数在分配堆内存时触发了Mono的GC,该GC调用就会被算作是哪个函数调用的。所以如果经常被特定函数来触发GC,那么从概率上来说这个函数或这个代码段分配的堆内存相当高。

运行性能

Q4:项目中勾选Static Batching和不勾选对效率有多大影响?我们在使用中发现勾选了以后包大小会增大一倍。如果不勾选,和自己在代码中调用StaticBatchingUtility.Combine的效率有多大区别?

  • 如果在Editor中进行勾选,则会在项目中生成一个较大的VBO,Runtime时通过该VBO来进行渲染,优点是有效减少了Draw Call,缺点是增大了发布游戏包的体积。
  • 如果在Runtime通过脚本来进行Batching,则相当于把拼合的时间由Editor中搬到了Runtime,所以加载时间(一般在场景加载时执行Batching)会稍有增加,但游戏包的体积将相应减少。

运行性能

Q5:如何在移动设备上,对Bloom和全屏抗锯齿进行优化?Unity标准资源里面自带的效率比较低(已经尝试过Bloom(Optimized))。

建议使用Asset Store上适合移动端的Bloom Shader插件,比如FxPro: Bloom&DOF和BloomPro等。

对于AA,目前在移动设备上并没有特别优化的方法,仅能建议在低端设备上关闭AA功能,而在高端设备上可尝试开启较低倍数(2x)的MSAA。

运行性能

Q6:我现在发现两个因素直接影响Overhead,一个是Shader的复杂度,一个是空Update方法及其同类空方法,不知道是否还有其他因素?

Overhead的计算方法是:Profiler当前帧统计的总耗时时间减去所有已知选项的累加时间,即引擎当前还无法识别模块的耗时时间。Overhead数值理论上是趋向于0的,但是由于目前市面上的硬件设备、系统框架过于丰富,所以引擎可能无法识别所有模块的CPU开销。
就我们目前遇到的大部分案例而言,Overhead数值较高一般是由硬件设备的垂直同步算法无法识别而引起的。所以,一般情况下,Overhead的数值其实并不需要开发者特别关注。
在UWA的性能分析中,我们并没有将Overhead计算在内,一方面是其本身数据的统计意义对目前大多数项目的性能优化帮助不大,另一方面是即便知道了它的CPU数值,也无法知道到底是哪些地方引起的,上层很难有针对性地进行优化。
当然,我们会持续对Overhead进行实验和研究,分析其CPU耗时规律、与已知选项的关联性等。后续有任何相关发现,我们都会总结成文,及时分享给大家。

QA——运行性能(一)相关推荐

  1. [Unity3D]总结使用Unity 3D优化游戏运行性能的经验

    作者:Amir Fasshihi 流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow Blade>已经将在标准iPhone和iPad设备上实现每秒60帧视为一个重要目 ...

  2. Windows 7合理虚拟内存RAMDISK提升运行性能

    我们都知道物理内存是计算机中非常重要的组件之一,也是我们评估计算机性能一个非常重要的指标.随着技术的发展,目前大多数的计算机都拥有至少2GB的内存容量,但我们的操作系统使用内存的容量也越来越大,那么究 ...

  3. [转]总结使用Unity 3D优化游戏运行性能的经验

    转载自:http://www.gameres.com/msg_221889.html 作者:Amir Fasshihi 流畅的游戏玩法来自流畅的帧率,而我们即将推出的动作平台游戏<Shadow ...

  4. 计算质数通过分区(Partition)提高Spark的运行性能(转载+自己理解)

    这篇博客是对[1]的进一步详细描述 自己的配置是台式机一台+笔记本组成spark集群 #-------------------------------------------------------- ...

  5. 通过分区(Partitioning)提高Spark的运行性能

    在Sortable公司,很多数据处理的工作都是使用Spark完成的.在使用Spark的过程中他们发现了一个能够提高Sparkjob性能的一个技巧,也就是修改数据的分区数,本文将举个例子并详细地介绍如何 ...

  6. 华为鸿蒙os设置界面,华为鸿蒙OS系统界面疑似曝光 运行性能提升超60%

    01华为鸿蒙OS系统界面疑曝光 近日,网上曝光了疑似华为鸿蒙OS操作系统的截图照片.据截图信息显示,此次"鸿蒙"OS操作系统的界面,不论在功能排列.状态栏,还是字体布局.按键配色等 ...

  7. Unity 3D中的内存管理与优化游戏运行性能的经验

    Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备的游戏开发,动辄内存占用飙上一两百兆,导致内存资源耗尽,从而被系统强退造成极差的体验.类似这种情况并不少见,但是绝大部分都是可以避免的.虽 ...

  8. 基于flowable的upp(统一流程平台)运行性能优化(1)

    经过一年规模化应用,近期现场反馈出现运行性能问题.其实,我们在构建upp系统时,已经知道了在一定时间点后会出现性能问题,但迫于团队整体研发平衡,以及对当前计算机性能的评估,就停留了下来. 当下,到了解 ...

  9. 白鹭引擎用java_白鹭引擎发布 5.1.6 版 优化打包 iOS Android App 的运行性能

    原标题:白鹭引擎发布 5.1.6 版 优化打包 iOS Android App 的运行性能 在3月12日,我们将为白鹭引擎推出5.1.6 版本.5.1.6版本是对去年12月份发布的5.1版本的一次功能 ...

最新文章

  1. 原创 | 工业场景中的预测性维护
  2. href=#与href=javascript:void(0)的区别
  3. 数学公式识别神器—Mathpix Snip
  4. JQUERY 常用方法汇总
  5. 97 岁诺奖得主的励志人生:本科学文学,博士转物理,54 岁才开始锂电池研究...
  6. struts-config.xml 中 action 与 forward 的重要属性
  7. 第二章 染色热力学理论单元测验
  8. 林斌减持小米股份三天套现3.4亿引关注 小米官方、林斌齐回应...
  9. C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
  10. js 运行中断停止_如何终止JS继续运行??
  11. 企业网ARP欺骗网关攻击与伪DHCP分析与处理
  12. java dht 爬虫_python开发的 dht网络爬虫
  13. 基于容器云技术的典型遥感智能解译算法集成
  14. 【虚幻引擎UE】UE5 六步实现UE5在网页端查看(云渲染+像素流) 4.26和4.27原理类似
  15. 锐龙R7 PRO 6850HS怎么样相当于什么水平级别
  16. python中的随机数种子seed()
  17. 【iOS15更新必学】 如何完整备份iPhone资料?
  18. Vue详细介绍及使用(组件)
  19. 近红外光谱基础知识—数据预处理
  20. SpringBoot访问静态资源(图片)

热门文章

  1. docker安装mysql5.7(仅供测试使用)
  2. 服务器架势iis网站文章,IIS5和IIS6应用中遇到的问题
  3. 房产行业短信用途分类
  4. SRPG游戏开发(四十二)第九章 战斗系统 - 四 计算战斗数据II(Calculate Combat Data II)
  5. ansible的copy模块
  6. 百度华为等各个面试笔试题目收集
  7. Windows Vista系统管理员账号密码修改的方法
  8. [2019编程]第六节教学大纲:学生类Student的基本概念及初步应用/CSS选择器的种类
  9. java文件类型转换,java 文件类型转换
  10. Pytorch中的学习率调整lr_scheduler,ReduceLROnPlateau