ARPG移动游戏性能分析报告:加载、GC、内存需重点关注!

简介:

◆◆

总体性能

0.png

(1)iOS设备的CPU性能普遍高于Android设备;
(2)Android设备上项目性能普遍偏低,CPU达标(超过33ms帧数比例<10%)比例仅为38.6%。

请输入图片描述

相较于MMORPG游戏,ARPG游戏的渲染和UI模块比重明显下降,自身逻辑代码的开销基本一致,加载模块比重明显上升。这是出于以下原因:

(1)相对于MMORPG来说,ARPG游戏的场景一般较小,UI界面相对简单,因此,渲染模块和UI模块的压力要小于MMORPG游戏;
(2)ARPG游戏重点突出打斗的丰富性和爽快感,所以ARPG游戏研发团队会为角色创建非常复杂的动画状态机,并且为了保证游戏副本打斗的流畅性,研发团队更倾向于在场景切换时将大量资源一次性载入,因此,ARPG游戏的自身逻辑代码和加载模块的压力更高。

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


◆◆

主流模块性能

一、渲染模块

严重程度:噩梦

Draw Call的主体使用范围为32~166,峰值平均为209
渲染三角面片的峰值集中在68.8K~268K,峰值平均为90.2K面。
UWA推荐:渲染三角面片峰值< 100K,目前达标比例: 55.2%

请输入图片描述
不透明物体的渲染耗时平均为2.9ms,半透明物体的渲染耗时平均为4.6ms
54.4%的项目使用了相机后处理特效,其具体分布如下:

请输入图片描述

(1)ARPG游戏无论是在Draw Call上还是在渲染的三角形面片数量上,均小于MMO游戏;
(2)但ARPG游戏的场景渲染三角形面片数量依然较高,仅55.2%的游戏能够将场景的渲染三角形面片数控制在10w以下。

二、加载模块
严重程度:地狱

请输入图片描述

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

请输入图片描述

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

请输入图片描述

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

请输入图片描述

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

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

请输入图片描述

请输入图片描述

(1) 使用NGUI作为UI解决方案的项目占据了相当高的比例,NGUI目前仍然是研发团队对于UI系统使用的主要解决方案;
(2) UI模块的性能开销很高,将近70%的研发团队都面临较为严重的性能问题;
(3) 与MMORPG不同的是,ARPG游戏UI模块的性能压力相对较小,优化难度相对较低。

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

请输入图片描述

五、动画模块
严重程度:普通

经过统计,目前仅使用Mecanim动画系统的ARPG游戏项目占比为45.3%,仅使用Unity3.x老版本动画系统的ARPG游戏项目占比为17.7%,两种系统混合使用的项目占比为37.0%

请输入图片描述


◆◆◆

内存模块

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

总体内存
严重程度:地狱

请输入图片描述

总体堆内存
严重程度:地狱
请输入图片描述

纹理资源
严重程度:地狱
请输入图片描述

网格资源
严重程度:普通
Memory_Mesh.png

音频资源
严重程度:普通

请输入图片描述

Render Texture资源
严重程度:噩梦
请输入图片描述

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

Shader资源
严重程度:普通

请输入图片描述

动画片段资源
严重程度:普通

请输入图片描述

希望以上数据能给大家的开发提供帮助。之后我们将不断与大家分享其他类型的数据,如ACT,SLG等。我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、划分,以使得这些数据更有代表性和说服力。

特别地,今天我们在此向大家隆重推荐ARPG研发史上的重磅之作:聚爆Implosion!我们将其性能进行了深度的分析并分享,并惊艳地发现,原来规则是可以来打破的,极限是能够被超越的!当我们尽力到无能为力,我们自然无所畏惧。你们的游戏也可以!





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

目录
相关文章
|
3月前
|
缓存 监控 算法
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
71 0
|
29天前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
64 1
|
6月前
|
Linux Go API
MemoryModule内存反射DLL加载探索
MemoryModule内存反射DLL加载探索
|
2月前
|
Java 开发者 iOS开发
8 种 Java- 内存溢出之二 -GC overhead limit exceeded
8 种 Java- 内存溢出之二 -GC overhead limit exceeded
|
4月前
|
存储 算法 Oracle
干货 | 一文看懂JVM内存布局及GC原理 携程
干货 | 一文看懂JVM内存布局及GC原理 携程
68 0
|
4月前
|
存储 Java C#
C# 垃圾回收机制(GC) 的概述 资源清理 内存管理
C# 垃圾回收机制(GC) 的概述 资源清理 内存管理
|
4月前
|
JSON Java 数据格式
jackson 转换报内存缢出:java.lang.OutOfMemoryError: GC overhead limit exceeded at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:141)
转换报内存缢出。 原因是查询数据时,在转json的数据太大,内存不足 解决方法:1、加内存(没有从根本上解决问题)。2、优化代码,例如减少查询,分页查询。
44 0
|
5月前
|
缓存 Java 数据库
Springboot项目启动时加载数据库数据到内存
Springboot项目启动时加载数据库数据到内存
|
5月前
|
缓存 Java 程序员
如何写出高性能代码(三)优化内存回收(GC)
可复用性在这里指的是,大多数的对象都是可以被复用的,这些可以被复用的对象就没必要每次都新建出来,浪费内存空间了。 处了巧用数据特性 中的例子,我这里再个Java中已经被用到的例子,这个还得从一段奇怪的代码说起。
31 0
|
9月前
|
存储 Java 编译器
JVM学习日志(六) JVM从加载到内存全过程
JVM从加载到内存全过程 简述
54 0
JVM学习日志(六) JVM从加载到内存全过程

热门文章

最新文章