版本: Unity 6 (6000.0)
语言英语
  • C#

ProfilerRecorder

Unity.Profiling 中的结构体

/

实现于:UnityEngine.CoreModule

建议修改

成功!

感谢您帮助我们改进 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每个建议,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议修改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

描述

记录 Profiler 标记或计数器产生的 Profiler 指标数据。

使用 ProfilerRecorder 访问 Profiler 公开的性能指标。您可以使用它以统一的方式读取 Profiler 计数器数据(如内存或渲染统计信息)和 Profiler 标记计时数据。

您可以在编辑器和 Player 构建中使用此 API,包括发行版 Player。使用 ProfilerRecorderHandle.GetAvailable 获取支持指标的完整列表。有关可用内置 Profiler 标记的列表,请参阅用户手册文档中的 常用 Profiler 标记

以下示例演示如何使用 ProfilerRecorder 获取内存和计时统计信息。

using System.Collections.Generic;
using System.Text;
using Unity.Profiling;
using UnityEngine;

public class ExampleScript : MonoBehaviour { string statsText; ProfilerRecorder systemMemoryRecorder; ProfilerRecorder gcMemoryRecorder; ProfilerRecorder mainThreadTimeRecorder;

static double GetRecorderFrameAverage(ProfilerRecorder recorder) { var samplesCount = recorder.Capacity; if (samplesCount == 0) return 0;

double r = 0; unsafe { var samples = stackalloc ProfilerRecorderSample[samplesCount]; recorder.CopyTo(samples, samplesCount); for (var i = 0; i < samplesCount; ++i) r += samples[i].Value; r /= samplesCount; }

return r; }

void OnEnable() { systemMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "System Used Memory"); gcMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "GC Reserved Memory"); mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "Main Thread", 15); }

void OnDisable() { systemMemoryRecorder.Dispose(); gcMemoryRecorder.Dispose(); mainThreadTimeRecorder.Dispose(); }

void Update() { var sb = new StringBuilder(500); sb.AppendLine($"Frame Time: {GetRecorderFrameAverage(mainThreadTimeRecorder) * (1e-6f):F1} ms"); sb.AppendLine($"GC Memory: {gcMemoryRecorder.LastValue / (1024 * 1024)} MB"); sb.AppendLine($"System Memory: {systemMemoryRecorder.LastValue / (1024 * 1024)} MB"); statsText = sb.ToString(); }

void OnGUI() { GUI.TextArea(new Rect(10, 30, 250, 50), statsText); } }

注意
ProfilerRecorder 分配非托管资源并实现 IDisposable 接口。使用 Dispose 在不再需要记录统计信息时释放资源。

ProfilerRecorder 以两种模式提供对 Unity 指标的访问:立即访问计数器的值和帧结束时的计数器值。其他资源:CurrentValueLastValueGetSampleProfilerRecorderHandle.GetAvailable

属性

CapacityProfilerRecorder 可以捕获的最大样本数。
Count已收集的样本数。
CurrentValue获取 Profiler 指标的当前值。
CurrentValueAsDouble获取 Profiler 指标的当前值作为双精度值。
DataTypeProfiler 指标的值数据类型。
IsRunning指示 ProfilerRecorder 是否附加到 Profiler 指标。
LastValue获取 ProfilerRecorder 收集的最后一个值。
LastValueAsDouble获取 ProfilerRecorder 收集的最后一个值作为双精度值。
UnitType单位类型。
Valid指示 ProfilerRecorder 是否与有效的 Profiler 标记或计数器相关联。
WrappedAround指示 ProfilerRecorder 容量是否已超过。

构造函数

ProfilerRecorder使用 Profiler 指标名称和类别构造 ProfilerRecorder 实例。

公有方法

CopyTo将已收集的样本复制到目标数组。
Dispose释放 ProfilerRecorder 的非托管实例。
GetSample获取样本数据。
Reset停止数据收集并清除已收集的样本。
Start开始数据收集。
Stop停止数据收集。
ToArray用于将已收集的样本转换为数组。

静态方法

StartNew初始化 ProfilerRecorder 的新实例并开始数据收集。