分析应用程序
无论您要分析哪种类型的应用程序,工作流程始终相同,包括以下步骤:
决定使用哪种 分析配置
运行会话并获取快照
启动会话并获取快照
在工具栏上,选择您要分析的运行配置。
在菜单 运行 | 切换性能分析配置 中,选择一个分析配置:

从菜单中选择 运行 | 使用 {run-configuration} 配置文件分析 {profiling-configuration}。
一旦分析开始,您将看到 dotTrace Profiler工具窗口在 分析 选项卡中打开,其中包含分析控制器。
如果您在分析配置中禁用了 从开始处收集分析数据 ,请点击
开始录制 以开始记录分析数据。重现您正在寻找的性能问题,或者如果您只是评估应用程序的整体性能,请在应用程序中执行所需的使用场景。
点击
获取快照。 收集的快照将添加到 dotTrace 分析器 窗口中的快照列表中。 要再次开始收集分析数据,请再次点击
开始录制。在收集快照后,您可以结束分析会话。 通常,您可以通过关闭被分析的应用程序或通过
分离 按钮分离分析器来完成(
终止 会强制终止被分析的应用程序和会话,因此仅在紧急情况下使用)。
分析已收集的快照
有关分析性能快照的更多信息,请参阅 分析分析结果。
分析快照
在 所有快照 选项卡的 dotTrace Profiler 工具窗口中,选择您要分析的快照。
使用以下视图之一分析收集的数据:
找到可疑方法后,按 F4 或从上下文菜单中选择 跳转到源。 Rider 将直接导航到该方法的源代码。
关于分析配置
在开始性能分析会话之前,您必须决定使用哪种性能分析配置。 通常,您需要在以下两者之间进行选择
性能分析配置指定了性能分析会话的设置,例如将使用哪种性能分析类型、是否必须分析子进程等。
分析目标始终是一个可执行文件*,该文件在 当前选择的 运行配置中指定。
您可以分析以下运行配置类型:
macOS(仅限 macOS 且仅适用于
net7.0-macos、net8.0-macos、net7.0-maccatalyst、net8.0-maccatalyst和Xamarin.Mac目标框架)
如果您选择其他类型的运行配置,这将禁用工具栏上的分析控件。
创建自定义分析配置
从菜单中选择 运行 | 切换性能分析配置 | 编辑配置。
在打开的 分析配置 窗口中,点击
以添加新的性能分析配置。
在列表中,选择一种性能分析类型:
时间轴
收集有关线程状态、应用程序事件和其他多线程数据的时间数据。 在 Windows 上,时间线性能分析基于 Windows 事件跟踪 (ETW),需要以管理员权限运行 JetBrains ETW Host Service。 在 macOS 和 Linux 上,不需要外部服务。 支持本机性能分析。
推荐用于大多数情况。 特别适用于分析多线程应用程序。 例如,使用它来确定 UI 卡顿、过多垃圾回收、不均匀的工作负载分配、I/O 不足等问题的原因。
如果您想为 Mono 或 Unity 应用程序创建性能分析配置,请分别选择 时间线(Mono) 或 时间线(Unity)。
抽样
精确的时间测量,不测量调用次数。
推荐用于大多数情况。 非常适合首次查找应用程序中的性能问题。
在 macOS 和 Linux 上,如果您想分析目标为 .NET Core 3.0 或更早版本的应用程序,请选择 采样(.NET Core 3.0 或更早版本)。 请注意,由于 .NET Core 的限制,您可能会遇到问题:被分析的应用程序可能会挂起或崩溃。 目标为 .NET Core 3.1(或更高版本)的项目可以无问题地进行性能分析。
跟踪
精确的调用次数测量,由于性能分析开销,时间测量可能不准确。
当采样数据不足时。 例如,用于分析算法复杂性(当调用次数信息比调用时间值更有价值时)。
逐行
仅限 Windows.
每行代码都被测量,由于分析器开销巨大,调用时间值不准确。
仅适用于高级用例。 例如,当您已经知道哪个函数导致问题并希望分析其每一行时。
指定配置 名称 和其他性能分析选项:
- 手动控制分析
允许您通过分析器控件手动控制分析。 例如,要获取快照,您需要点击 获取快照。
- 从开始处收集分析数据
如果选中,dotTrace 将在启动后立即开始收集性能分析数据。 否则,dotTrace 将仅在您点击 开始录制 后开始收集数据,位于 dotTrace Profiler 工具窗口中。
- 通过 API 控制分析
允许您直接从被分析应用程序的代码中控制分析。 例如,在代码的确切位置获取快照。 在 dotTrace 文档中了解更多关于使用 API 的信息。
- 分析子进程
如果选中,dotTrace 将不仅分析主应用程序进程,还会分析其运行的进程。
- 分析 .NET 5+ 子进程
(macOS 和 Linux 上的时间线)
如果选中,dotTrace 将不仅分析主应用程序进程,还会分析其运行的进程。 仅支持 .NET 5 及更高版本的进程。
- 采样率
(Windows 上的时间线)
dotTrace 从 Windows 内核获取堆栈跟踪数据。 默认情况下,内核每秒提供 1000 个采样事件。 您可以将采样率提高到每秒 8000 个采样。 例如,在游戏开发中,当您希望分析快速执行的本机代码时,这很有意义。 采样率越高,结果越准确,但快照的大小也会越大。
- 时间度量
(Windows 上的采样、跟踪、逐行分析)
此选项定义 dotTrace 必须如何计算调用时间。 通常,这是在 dotTrace 是否应计算线程未工作的时间之间进行选择。 有关更多信息,请参阅 dotTrace 文档。
实时(性能计数器)
推荐。 dotTrace 计算从方法进入到退出之间经过的总实际时间。 此时间不依赖于应用程序线程的状态。 时间是使用系统性能计数器计算的。
实时(CPU 指令)
dotTrace 计算从方法进入到退出之间经过的总实际时间。 此时间不依赖于应用程序线程的状态。 时间是使用 CPU 寄存器计算的。
线程时间
dotTrace 仅计算特定线程运行时的时间。 线程处于等待或休眠状态的时间不包括在计算中。
线程周期时间
dotTrace 仅计算特定线程运行时的时间。 线程处于等待或休眠状态的时间不包括在计算中。 时间是使用 CPU 寄存器计算的。
- 启用内联
(跟踪、逐行分析)
如果您希望 dotTrace 关闭 JIT 内联并获取与应用程序源代码结构非常相似的调用堆栈,请清除此选项。
- 高准确性
(跟踪、逐行分析)
如果选择此项,dotTrace 将通过采集更多时间采样来考虑分析器本身所花费的时间。
- 启用原生分析
(Windows 上的时间线,Unity/Mono)
如果选择此项,dotTrace 将收集本机调用堆栈数据。 生成的快照将包含托管和本机调用堆栈。 此性能分析选项可能有助于发现 Unity 游戏中的性能问题。
- 收集原生分配
(Windows 上的时间线)
如果选中,dotTrace 将收集被分析应用程序在本机(非托管)堆中执行的所有内存分配信息。
每分配 ... KB 采样一次 定义了触发内存分配采样的分配内存大小。 默认值为 100 KB。 这意味着一旦分配的内存总大小超过 100 KB,就会触发一个采样。 例如,在分析期间,一个本机线程分配了五个 50 KB 的内存块。 在这种情况下,dotTrace 只会检测到两个 100 KB 的分配。
大小越小,结果越准确,但快照的大小也会越大。 使用此选项可以在数据准确性和快照大小之间找到最佳平衡。
如果选择了 仅收集未释放的分配 ,dotTrace 将仅将那些在拍摄快照时仍位于非托管堆中的分配数据保存到快照中。
- 收集 TPL 事件
(时间线)
如果选中,分析性能可能会受到影响,但 dotTrace 将收集任务并行库(TPL)数据。 如果清除,将不会在
任务中显示节点, 调用树 和异步调用节点将不显示其 await 和 延续 部分。如果您的应用程序不使用多任务处理或您不需要此信息,请清除此选项。
- 收集调试输出
(Windows 上的时间线)
如果选中,dotTrace 将收集被分析应用程序发送到 调试输出的所有消息的信息。
- 下载符号文件
(Windows 上的时间线)
PDB 文件(或符号文件)允许您在调用树中查看本机函数。 这与本机应用程序以及调用本机代码的托管应用程序相关。 如果您选择 下载符号文件 ,JetBrains Rider 将在您获取快照后尝试从远程服务器下载 PDB 文件。 请注意,这可能会根据文件大小花费大量时间。
默认情况下,JetBrains Rider 会在
_NT_SYMBOL_PATH环境变量中指定的位置查找 PDB 文件。 或者,您可以使用 配置符号服务器 链接指定自定义的本地或远程位置。如果启用了 后台下载 ,dotTrace 会在分析会话运行时开始下载符号文件。 这可能有助于减少获取快照所需的时间。