专栏中心

EEPW首页 > 专栏 > Unity3D:资源加载指标

Unity3D:资源加载指标

发布人:xyni2023 时间:2023-04-27 来源:工程师 发布文章
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
资源加载指标

AsyncReadManagerMetrics 类用于监控运行时资源加载和文件读取性能。该类记录了有关由 AsyncReadManager 管理的所有文件读取操作的数据。

Unity 引擎使用 AsyncReadManager 在运行时读取大多数文件。使用 AsyncReadManager 加载的文件包括 AssetBundles、Addressables 和 Resources。此外,您可以使用 AsyncReadManager.Read 从脚本加载文件。

AsyncReadManagerMetrics 类允许您启用指标收集并检索记录的指标数据。您还可以过滤和汇总记录的数据以帮助您进行分析。该指标信息可帮助您识别涉及资源加载的问题区域,并衡量您的更改对资源加载性能的影响。

AsyncReadManagerMetrics 类在开发版中提供。您必须将任何对 AsyncReadManagerMetrics API 的调用保护在使用 ENABLE_PROFILER 符号的 #if 预处理器指令内。ENABLE_PROFILER 符号仅针对开发版定义,这可使您的脚本在指标不可用的版本中编译。为了向后兼容,您还可以使用 UNITY_2020_2_OR_NEWER 符号从早期版本的 Unity 中去除指标代码。例如:

# if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerMetrics.StartCollectingMetrics();
# endif
启用指标收集

您必须启用指标收集才能开始记录数据。使用以下方法之一启用指标收集:

  • 调用 AsyncReadManagerMetrics.StartCollectingMetrics *启动应用程序时传递命令行参数 -enable-file-read-metrics

注意: 启动 Unity 编辑器应用程序时,您可以通过传递 -enable-file-read-metrics 在进入运行模式时启用收集。但是,编辑器本身会加载某些类别的资源(如纹理),并且不会在您进入运行模式时重新加载它们。要全面了解文件 IO 指标,您必须从应用程序的开发版中收集数据。

获取指标数据

通过调用 GetMetrics 检索由 AsyncReadManagerMetrics 类收集的指标。向此函数传递 AsyncReadManagerMetrics.Flags 指定是否在检索后清除指标。清除指标会将所有已完成(包括取消和失败)的读取从存储的指标中删除。清除不会影响任何排队中或进行中的操作;您可以之后通过再次调用 GetMetrics 获取未完成操作的指标。通过定期清除指标,您可以避免重复读取相同的数据,还可以减少系统的数据开销。

# if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
# endif

指标数据会尽可能包括有关读取操作的上下文信息。这些信息包括:请求该读取操作的 AssetLoadingSubsystem、AssetName 以及 AssetTypeID。当 AsyncReadManager 无权访问此信息时,这些指标字段的值分别为:Other、空值和 0。

__注意:__目前已知支持的资源 TypeID 如下表所示。对于可能出现的其他 TypeID,请参阅 YAML 类 ID 参考。

TYPEID类型名
28Texture2D
117Texture3D
89CubeMap
43Mesh
获取汇总数据

您可以使用以下方法获取 AsyncReadManager 指标的汇总:

  • GetCurrentSummaryMetrics – 返回自上次清除指标存储以来收集的所有指标的汇总。

  • GetSummaryOfMetrics – 返回一个包含指标汇总的 AsyncReadManagerRequestMetric 数组,该数组可通过调用 GetMetrics 获得。

例如:

# if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetCurrentSummaryMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
# endif

或者:

# if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    AsyncReadManagerRequestMetric[] metrics 
        = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
    AsyncReadManagerSummaryMetrics summaryOfMetrics 
        = AsyncReadManagerMetrics.GetSummaryOfMetrics(metrics);
# endif

指标的汇总数据包括以下统计信息:

  • 平均带宽

  • 平均读取大小

  • 加载时间最长的资源类型

  • 读取数

  • 请求数

  • 读取的总字节数

(请参阅 AsyncReadManagerSummaryMetrics 获取完整列表。)

默认情况下,汇总统计信息包括所有读取操作,其中包含排队中或进行中的读取操作。您可以使用过滤器将汇总限制为您特别感兴趣的那些操作。例如,您可以使用过滤器将汇总统计数据限制为已完成的纹理资源读取操作。

注意: 计算汇总统计确实需要处理资源。为了防止这些计算改变您正在记录的测量值,您可以先收集指标,然后在您分析的操作完成后才获取汇总。

汇总过滤器

通过下列方式之一使用 AsyncReadManagerMetricsFilters 可指定要汇总的数据类型。任何与过滤器不匹配的指标都将从汇总中排除。您可以使用以下类别进行过滤:

  • 资源类型(按 YAML ID) * 处理状态(读取操作是否排队、读取、完成等)

  • 读取类型(异步或同步)

  • 优先级(高或低)

  • 子系统 (AssetLoadingSubsystem)

您可以为同一个过滤器设置多个类别。读取操作必须匹配所有类别才能使其指标包含在汇总中。例如,您可以为一个过滤器指定 ProcessingState 和 Subsystem 值,仅汇总由指定子系统启动、处于指定处理状态中的操作。

您还可以为一个类别指定多个值。在这种情况下,读取操作可以匹配为该类别指定的任何值,使其指标包含在汇总中。例如,您可以为 Subsystem 类别指定 Mesh 和 Texture,汇总网格和纹理资源的操作。


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: 编辑器 数字孪生 3D

相关推荐

多材料3D打印机“现场”制造整台电动机

MPLAB IDE集成开发环境用户指南

高性能嵌入式工作区 (HEW) V.4.04 用户手册

SoC 集成度如何影响 SMT 贴片良率

大尺度抽象化竞赛启幕,数据中心迎来全新变革

英飞凌与英伟达利用数字孪生加速人形机器人

液晶字模编辑器

资源下载 2007-02-09

3D透视校正纹理映射矩阵电路设计及实现

AI 全域数字孪生加速半导体与电子系统研发落地

如何让2声道喇叭輸出6声道音效 PDF资料

数字孪生:云的极限

数字孪生:云阔凭鱼跃,天高任鸟飞

晶圆厂与封装厂自动化迎来设备和方法论变革

多裸片芯片设计中凸点与硅通孔的高效规划方案

达索系统与英伟达围绕虚拟孪生构建工业人工智能平台

更多 培训课堂
更多 焦点
更多 视频

技术专区