重要参数解析
该页面主要反馈和分析项目运行过程中性能相关参数的具体使用情况。这些参数均是我们经过大量的项目优化所总结下来的经验参数。研发团队通过该项分析可以快速定位项目运行时的主要性能瓶颈。我们认为,对于重要参数所反映出的性能瓶颈进行有针对性的优化可以为项目带来大幅度的性能提升。目前,UWA所提供的重要性能参数主要有:
Instantiate实例化操作
以上图表主要展示项目运行过程中 “Instantiate实例化操作” 的具体调用情况,包括 “CPU占用”、“堆内存分配” 和 “调用次数” 。结合项目运行截图,您可以直接查看,项目运行到何时会调用 Instantiate 实例化操作并出现较高的 CPU 占用和堆内存分配。同时,我们将逻辑代码中调用 Instantiate 实例化操作的具体函数进行详细分析,包括其调用路径、对应的CPU占用和堆内存分配等,如下图所示。通过该表格,您可以进一步掌握 Instantiate 实例化操作的具体调用情况,并制定更为行之有效的优化计划。
同时,您需要详细查看 Instantiate 实例化操作的调用次数。一般情况下,我们不建议项目在运行过程中频繁地调用 Instantiate 和 Destroy 来创建和销毁一个GameObject。这种做法不仅可能会造成频繁且较高的CPU占用,更重要的是,它将造成大量的内存碎片,从而造成越来越多的堆内存分配,进而加速系统垃圾回收操作(Garbage Collection)的到来。因此,建议您详细查看 “调用次数” 图表,检测项目运行时是否存在 Instantiate 的频繁调用情况。
Log 输出
Log 输出在项目运行时往往占据较高的CPU占用和堆内存分配,但却是开发团队最容易忽视的一环。对此,我们通过以上图表来展示项目运行过程中 Log 的具体输出情况,包括 “CPU占用”、“堆内存分配” 和 “调用次数” 。结合项目运行截图,您可以直接查看,项目运行到何时会触发 Log 输出及其对应的CPU占用和堆内存分配。同时,我们将逻辑代码中输出 Log 的具体函数进行详细分析,包括其调用路径、对应的CPU占用和堆内存分配等,如下图所示。通过该表格,您可以进一步掌握 Log输出 的具体触发情况,并直接针对具体调用函数进行改进和优化。
Shader 解析
Shader 的解析操作在项目运行时往往占据较高的CPU占用,它经常发生在场景切换、资源加载和 GameObject 实例化时。对此,我们通过以上图表来展示项目运行过程中的 Shader 解析的具体调用情况,包括 “CPU占用”、“堆内存分配” 和 “调用次数”。结合项目运行截图,您可以直接查看,项目运行到何时会进行 Shader 解析及其对应的 CPU 占用。同时,我们将逻辑代码中调用 Shader 解析的具体函数进行详细分析,包括其调用路径、对应的CPU占用和堆内存分配等,如下图所示。通过该表格,您可以进一步掌握 Shader 解析的具体调用情况,并直接针对具体调用函数进行改进和优化。
Resources.UnloadUnusedAssets 调用
在场景切换时,引擎自身会调用(用户也可通过脚本手动调用)Resources.UnloadUnuesdAssets API 来清除上一场景中不再使用的资源。Resources.UnloadUnusedAssets 的底层运作机理是,对于每个资源,遍历所有场景中每个GameObject结点,检测该资源是否被某个 GameObject 所使用,如果全部GameObject都没有使用,则引擎才会认定其为Unused资源,进而进行卸载操作。因此,该过程极为耗时。一般情况下,我们建议用户仅在场景切换时调用该API。对此,在检测过程中,我们通过图表将该函数的调用情况及其CPU占用进行显示,以便您直观地查看该API的调用是否合理。