配置分析会话
要配置分析会话,您需要:
指定 dotTrace 应如何运行您希望分析的应用程序。 您可以借助 运行配置来完成此操作。 如果您想要 分析已运行的应用程序 ,则此步骤不是必需的。
指定 dotTrace 应如何分析应用程序: 选择分析类型 ,并(可选) 配置其他分析选项 ,例如时间测量类型、进程过滤器等。
1. 创建运行配置
运行配置是告诉 dotTrace 如何运行被分析应用程序的方式。 例如,独立 .NET 应用程序的运行配置将包括应用程序可执行文件的路径、命令行参数以及应用程序工作目录的路径。
如果您已经有了被分析应用程序的运行配置,请从 新进程运行 下的 选择您想要分析的内容 中选择此运行配置。 否则,请按照以下说明创建运行配置。
要创建运行配置
在 选择您想要分析的内容、 新进程运行 下,点击
添加运行配置。在 新建运行配置 向导中,选择应用程序类型并提供应用程序选项:
点击 保存。 这将创建并保存运行配置。 下次需要分析此应用程序时,从 新进程运行 列表中选择创建的配置。
2. 选择分析类型
在 分析类型 下的 选择您要如何分析 中选择分析类型。
分析类型定义了 dotTrace 收集分析数据的方式,以及由此产生的数据量和数据类型。 下表将帮助您选择最适合的分析类型。 有关更多信息,请参阅 基础。 分析类型。
描述 | 使用场景 | |
|---|---|---|
时间线 | 收集有关线程状态、应用程序事件和其他多线程数据的时间数据。 在 Windows 上,时间线分析基于 Windows 事件跟踪 (ETW),需要以管理员权限运行 JetBrains ETW Host Service。 在 macOS 和 Linux 上,不需要外部服务。 支持 本机分析。 | 推荐用于大多数情况。 特别适用于分析多线程应用程序。 例如,可用于确定 UI 卡顿、过多垃圾回收、不均匀的工作负载分布、不足的 I/O 等问题的原因。 |
采样 | 精确的时间测量,但不测量调用次数。 | 推荐用于大多数情况。 非常适合首次查找应用程序中的性能问题。 |
跟踪 | 精确的调用次数测量,但由于分析开销,时间测量可能不准确。 | 当采样数据不足时使用。 例如,用于分析算法复杂性(当调用次数信息比调用时间值更有价值时)。 |
逐行 | 仅限 Windows. 每行代码都被测量,但由于分析器开销巨大,调用时间值不准确。 为了降低开销,您可以仅分析特定方法 使用过滤器。 | 仅适用于高级用例。 例如,当您已经知道哪个函数导致问题并希望分析其每一行时。 |
3. 配置其他分析选项
- 采样率
(Windows 上的时间线)
dotTrace 从 Windows 内核获取堆栈跟踪数据。 默认情况下,内核每秒提供 1000 个采样事件。 您可以将采样率提高到每秒 8000 个采样。 例如,在游戏开发中,当您希望分析快速执行的本机代码时,这很有意义。 采样率越高,结果越准确,但快照也越大。
- 控制分析
手动 (默认)
使用 分析控制器窗口中的按钮控制分析会话。 例如,要获取快照,点击 获取快照并等待。
使用 API
直接从被分析应用程序的代码中控制分析。 例如,要在代码的确切位置获取快照,请调用
MeasureProfiler.SaveData()函数。 在 通过 API 控制分析过程中了解有关使用 API 的更多信息。不适用于 Linux 和 macOS 上独立应用程序的时间线分析类型。
- 时间度量
(采样、Windows 上的跟踪、逐行)
此选项定义了 dotTrace 必须如何计算调用时间。 通常,这是在 dotTrace 是否应计算线程未工作的时间之间进行选择。 有关更多信息,请参阅 基础。 时间测量。
实际时间(性能计数器)
推荐。 dotTrace 计算方法进入和退出之间经过的总体实际时间。 此时间不依赖于应用程序线程状态。 时间是使用系统性能计数器计算的。
实际时间(CPU 指令)
dotTrace 计算方法进入和退出之间经过的总体实际时间。 此时间不依赖于应用程序线程状态。 时间是使用 CPU 寄存器计算的。
线程时间
dotTrace 仅计算特定线程运行时的时间。 线程等待或休眠时的时间不包括在计算中。
线程周期时间
dotTrace 仅计算特定线程运行时的时间。 线程等待或休眠时的时间不包括在计算中。 时间是使用 CPU 寄存器计算的。
- 启用内联
(跟踪,逐行)
如果您希望 dotTrace 关闭 JIT 内联并获取与应用程序源代码结构非常接近的调用堆栈,请清除此选项。
- 高准确性
(跟踪,逐行)
如果选中,dotTrace 将通过采集更多时间样本来考虑分析器本身所花费的时间。
- 启用原生分析
(时间线,Unity/Mono 在 Windows 上)
如果选中,dotTrace 将收集本机调用堆栈数据。 生成的快照将包含托管和本机调用堆栈。 此分析选项可能有助于查找 Unity 游戏中的性能问题。
- 收集原生分配
(Windows 上的时间线)
如果选中,dotTrace 将收集被分析应用程序在本机(非托管)堆中执行的所有内存分配的信息。
每 ... KB 的采样分配 定义触发内存分配采样的分配内存大小。 默认值为 100 KB。 这意味着一旦分配的内存总大小超过 100 KB,就会触发一个采样。 例如,在分析期间,本机线程分配了五个 50 KB 的内存块。 在这种情况下,dotTrace 只会检测到两个 100 KB 的分配。
大小越小,结果越准确,但快照也越大。 使用此选项可以在数据准确性和快照大小之间找到最佳平衡。
如果选中 仅收集未释放的分配 ,dotTrace 将仅将快照中仍在非托管堆中的分配数据保存到快照中。
- 收集 TPL 事件
(时间线)
如果选中,分析性能可能会受到影响,但 dotTrace 将收集任务并行库 (TPL) 数据。 如果清除,将不会在
Task中显示节点, 调用树 和async调用节点将不显示其 await 和 延续 部分。如果您的应用程序不使用多任务或您不需要此信息,请清除此选项。
- 收集调试输出
(Windows 上的时间线)
如果选中,dotTrace 将收集被分析应用程序发送到 调试输出的所有消息的信息。
- 下载符号文件
(Windows 上的时间线)
PDB 文件(或符号文件)使您可以在调用树中查看本机函数。 这与 本机应用程序以及调用本机代码的托管应用程序相关。 如果您选择 下载符号文件 ,dotTrace 将在您获取快照后立即尝试从远程服务器下载 PDB 文件。 请注意,这可能会根据文件大小花费大量时间。
默认情况下,dotTrace 会在
_NT_SYMBOL_PATH环境变量中指定的位置查找 PDB 文件。 或者,您可以使用 编辑符号文件位置 指定自定义本地或远程位置。如果启用了 后台下载 ,dotTrace 会在分析会话运行时开始下载符号文件。 这可能有助于减少获取快照的时间。
- 从开始处收集分析数据
如果选中,dotTrace 将在启动后立即开始记录分析数据。 否则,dotTrace 将仅在您点击 启动 并在 分析控制器窗口中后开始收集这些数据。
4. (可选)配置进程过滤器
如果被分析的应用程序创建了多个进程,请使用 进程筛选器 设置来指定您想要分析的进程。 您可以选择预定义的过滤器或创建一个新的过滤器。
请注意,进程过滤器的工作方式取决于所选 运行配置中指定的应用程序类型。
应用程序类型 | 描述 |
|---|---|
dotTrace 将仅分析与指定过滤器匹配的进程。 过滤器适用于被分析进程的整个进程树(包括子进程)。 例如,您有一个托管进程,该进程创建了多个子进程。 您希望不仅分析主进程,还分析名称中包含 | |
在此模式下,启动分析会话不会启动被分析进程。 相反,dotTrace 会等待并附加到操作系统中启动的第一个托管进程。 当选择了某些 进程筛选器 时,dotTrace 将附加到第一个符合过滤器的进程。 例如,您创建了包含过滤器: | |
未应用进程过滤器。 |
选择进程过滤器
在 选择您要如何分析 下, 高级选项 ,打开 进程筛选器 列表。
选择所需的过滤器。
dotTrace 提供了两个预定义的过滤器:
默认 :未应用进程过滤器。
整个进程树 :dotTrace 将分析整个进程树,包括子进程。 如果选择了 .NET 进程运行配置,dotTrace 将附加到系统中启动的第一个托管进程并分析其所有子进程。

创建进程过滤器
在 选择您要如何分析 下, 高级选项 ,打开 进程筛选器 列表。
选择 添加筛选器。
指定过滤器设置:
名称 :过滤器名称。
分析整个进程树 :如果选中,dotTrace 将分析整个进程树,包括子进程。 仅当您为 .NET 进程 运行配置创建过滤器时,禁用此选项才有意义。 在这种情况下,dotTrace 将等待并附加到系统中与过滤器匹配的第一个进程,但不会分析此进程的子进程。
包含过滤器掩码, 排除过滤器掩码 :分别为包含和排除过滤器掩码。 掩码根据以下规则应用:
默认策略是“分析所有”。
首先应用包含掩码。 排除掩码应用于包含掩码过滤后的进程。
您可以使用星号
*通配符。
例如,要分析名称中包含
服务的所有子进程,但排除MyService,请添加*Service*包含掩码和MyService排除掩码。
点击 保存。
5. (可选)为逐行分析配置过滤器
逐行分析在某些情况下可能是有效的,但它总是非常耗时。 为了尽量减少分析开销,您可以定义一些规则。 根据这些规则,并非所有函数都逐行分析,而是仅分析那些对进一步调查有意义的函数。
因此,您可以创建并设置一个或多个仅匹配您需要的函数/类/程序集的过滤器。
要为逐行分析创建过滤器
在 选择您要如何分析 下,选择 逐行 分析类型。
点击 编辑筛选器。
在 编辑过滤器 对话框中点击
添加筛选器。选择过滤器类型:
代码分析的包含范围 :将指定的代码项包含到分析中,并排除所有其他代码项。
代码分析的排除范围 :将指定的代码项从分析中排除。
不要分析带有属性标记的代码 :排除具有指定属性的代码项。
如果您选择了前两种选项之一,请指定要包含或排除的程序集、类和/或方法。 代码项是彼此独立过滤的。 例如,如果您指定了一个方法,并在程序集和类中保留星号
*,则会从所有程序集和所有类中排除具有指定名称的方法。如果您选择了最后一个选项,请指定将用于从分析中排除符号的属性名称。 可选地,指定声明此属性的程序集名称。
在过滤器中指定代码项名称时,您可以使用星号通配符:
*(星号)表示零个或多个字符。 例如,*.Tests通配符将排除所有测试项目的代码分析。点击 确定。