MMO移动游戏性能分析报告:渲染、UI、逻辑代码和内存需重点关注

简介:

总体性能

请输入图片描述

1)iOS设备的CPU性能普遍高于Android设备。
2)Android设备上项目性能普遍偏低,CPU达标比例仅为28.5%。

请输入图片描述

下面我们就来具体分析下这些主流模块的开销情况。

一、渲染模块
严重程度:噩梦

Draw Call的主体使用范围为45~185,峰值平均为215;
渲染三角面片的峰值集中在62K~152K,峰值平均为75K面。
UWA推荐:渲染三角面片峰值< 100K,目前达标比例: 53.9%。
请输入图片描述

不透明物体的渲染耗时平均为3.5ms,半透明物体的渲染耗时平均为4.5ms。
58.3%的项目使用了相机后处理特效,其CPU耗时主要集中在0.1~8.0ms,具体分布如下:
请输入图片描述

1)MMORPG游戏的场景渲染三角形面片数量普遍较高,仅53.9%的项目能够将场景的渲染三角形面片数控制在10w以下;
2)相机后处理特效在该类型游戏中已经开始较为广泛的使用。

二、UI模块
严重程度:地狱

请输入图片描述

请输入图片描述

1)使用NGUI作为UI解决方案的项目占据了相当高的比例,NGUI目前仍然是研发团队对于UI系统使用的主要解决方案;
2)UI模块的性能开销很高,将近80%的研发团队都面临较为严重的性能问题;
3)从性能上来看,UGUI无论从CPU占用还是堆内存分配,均大幅领先于NGUI。

三、逻辑代码
严重程度:地狱

请输入图片描述

1)GC触发频率很高,是造成卡顿的主要原因之一;
2)90%以上的游戏团队需要对GC的调用进行进一步规划,对代码的堆内存分配进行大力优化。

请输入图片描述

1)Instantiate实例化操作平均每次调用的CPU耗时主要分布在: 2.0~20.5 ms,均值为6.2ms,每1万帧总调用次数主要分布在: 109~1933 次。
2)Instantiate的频繁实例化是太多数研发团队非常容易忽视的问题;

请输入图片描述

Log输出操作平均每次调用的CPU耗时主要分布在: 2.6~22.2 ms,均值为7.2ms。

请输入图片描述

1)Shader解析操作平均每次调用的CPU耗时主要分布在: 6.5~217.5 ms,均值为28.8ms。
2)Shader解析时间较高,且大多数情况是相同Shader的重复开销,值得研发团队密切关注。

四、粒子系统
严重程度:普通

请输入图片描述

五、动画模块
严重程度:普通
请输入图片描述

目前仅使用Mecanim动画系统的MMO游戏项目占比为35.3%,仅使用Unity 3.x老版本动画系统的占比为19.3%,两种系统混合使用的占比为44.4%。


内存模块

内存泄露几乎是所有手游都难避开的问题,其在MMORPG手游中出现的情况占比为51.6%。

总体内存
严重程度:地狱

请输入图片描述

总体堆内存
严重程度:普通

请输入图片描述

项目的内存占用很大一部分来自于资源的使用,下面我们将对项目中主流资源的使用情况进行分析。

纹理资源
严重程度:噩梦

请输入图片描述

Mesh资源
严重程度:噩梦

请输入链接描述

Render Texture资源
严重程度:噩梦

请输入图片描述

字体资源
严重程度:普通
请输入图片描述

Shader资源
严重程度:普通

请输入图片描述

AnimationClip资源
严重程度:普通
请输入图片描述

以上是UWA第一次尝试以项目类型的属性分类发布性能总结报告,之后我们将不断与大家分享其他类型的数据,如ARPG,ACT,SLG等。我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、划分,以使得这些数据更有代表性和说服力。

当然,UWA提供的不仅是性能深度测评的工具,解决开发过程中千变万化的需求才是服务的宗旨。简单优化,优化简单!我们会将服务至上的态度和诚意,努力延伸至每个开发者的身边。





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

目录
相关文章
|
4天前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
3月前
|
存储 缓存 JSON
一行代码,我优化掉了1G内存占用
这里一行代码,指的是:String.intern()的调用,为了调用这一行代码,也写了几十行额外的代码。
|
3月前
|
缓存 Java
Java内存管理秘籍:掌握强软弱幻四大引用,让代码效率翻倍!
【8月更文挑战第29天】在Java中,引用是连接对象与内存的桥梁,主要分为强引用、软引用、弱引用和幻象引用。强引用确保对象生命周期由引用控制,适用于普通对象;软引用在内存不足时可被回收,适合用于内存敏感的缓存;弱引用在无强引用时即可被回收,适用于弱关联如监听器列表;幻象引用需与引用队列配合使用,用于跟踪对象回收状态,适用于执行清理工作。合理使用不同类型的引用车可以提升程序性能和资源管理效率。
42 4
|
3月前
|
前端开发 JavaScript Java
揭开 JavaScript 垃圾回收的秘密——一场与内存泄漏的生死较量,让你的代码从此焕然一新!
【8月更文挑战第23天】本文通过多个实例深入探讨了JavaScript中的垃圾回收机制及其对应用性能的影响。首先介绍了基本的内存管理方式,随后分析了变量不再使用时的回收过程。接着,通过事件监听器未被移除及全局变量管理不当等场景展示了常见的内存泄漏问题。最后,文章介绍了使用`WeakRef`和`FinalizationRegistry`等现代API来有效避免内存泄漏的方法。理解并运用这些技术能显著提升Web应用的稳定性和效率。
85 0
|
4月前
|
存储 Rust JavaScript
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
|
4月前
|
监控 Java 图形学
【性能优化篇】U3D游戏卡顿大作战:内存与渲染效率的极致提升
【7月更文第12天】在Unity3D游戏开发领域,性能优化是决定玩家体验好坏的关键一环。游戏频繁卡顿,不仅破坏了沉浸式体验,还可能造成玩家流失。本文将深入探讨如何有效解决U3D游戏卡顿问题,特别聚焦于内存管理和渲染效率两大核心领域,助力开发者打造流畅丝滑的游戏世界。
294 0
|
5月前
|
监控 Rust 安全
Rust代码在公司电脑监控软件中的内存安全监控
使用 Rust 语言开发的内存安全监控软件在企业中日益重要,尤其对于高安全稳定性的系统。文中展示了如何用 Rust 监控内存使用:通过获取向量长度和内存大小来防止泄漏和溢出。此外,代码示例还演示了利用 reqwest 库自动将监控数据提交至公司网站进行实时分析,以保证系统的稳定和安全。
210 2
|
6月前
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池寿命代码之美:从功能实现到艺术创作
【5月更文挑战第28天】 在移动开发领域,特别是针对Android系统,性能优化始终是关键议题之一。本文深入探讨了如何通过细致的内存管理和电池使用策略,提升Android应用的运行效率和用户体验。文章不仅涵盖了现代Android设备上常见的内存泄漏问题,还提出了有效的解决方案,包括代码级优化和使用工具进行诊断。同时,文中也详细阐述了如何通过减少不必要的后台服务、合理管理设备唤醒锁以及优化网络调用等手段延长应用的电池续航时间。这些方法和技术旨在帮助开发者构建更加健壮、高效的Android应用程序。
|
5月前
|
存储 Java
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
JavaSE 面向对象程序设计初级 静态static 包package 常量final 代码块 代码实操理论内存原理详解
32 0
|
6月前
|
存储 Java 编译器
Java方法的基本内存原理与代码实例
Java方法的基本内存原理与代码实例
56 0