动态程序分析 (DPA)
动态程序分析(或 DPA)是一个在 JetBrains Rider 的后台运行的过程,用于检查您的应用程序是否存在以下相关问题:
内存分配 – 闭包以及分配到大对象堆 (LOH) 和小对象堆 (SOH) 的内存。
数据库使用 – 命令执行时间过长、大量打开的连接等。
ASP Web 应用程序 – 请求处理时间过长、大量打开的连接等。
DPA 会在每次您运行解决方案时自动启动。 数据收集几乎没有额外开销:我们在各种真实解决方案上测试了 DPA,性能下降在 0% 到 2% 之间。
为了更容易理解 DPA,您可以将其视为始终开启的性能分析:您无需运行性能分析器、启动分析会话或获取快照。 只需像往常一样工作,当您运行解决方案时,所有数据都会在后台收集。

有关更多详细信息,请参阅 开始使用 DPA。
支持的操作系统和框架
操作系统 | 框架 |
|---|---|
Windows | .NET Framework、.NET Core、.NET |
Linux、macOS | .NET Core 3.0 及更高版本,.NET 5.0 及更高版本 |
前提
请确保在 JetBrains Rider 设置 的 Dynamic Program Analysis 页面上启用了 插件 Ctrl+Alt+S。
DPA 基于 Windows 事件跟踪 (ETW)。 为了接收 ETW 事件,DPA 使用了必须安装在系统中的特殊 'JetBrains ETW Host Service'。 通常,您会在安装 JetBrains Rider 时一并安装此服务。 如果未安装该服务,DPA 将处于非活动状态。 在这种情况下,请按照以下说明操作。
安装 'JetBrains ETW Host Service'(仅在 Rider 安装过程中未安装时)
通过以下任一方式打开 Dynamic Program Analysis 窗口:
使用菜单 。
单击 Rider 状态栏中的 DPA 图标
,然后选择 查看问题。
单击窗口顶部的 安装 'ETW Host Service' 链接。
在 Windows UAC 窗口中,允许 Rider 对您的计算机进行更改。
服务安装只需执行一次。 如果您单击 运行一次 'ETW Host Service' 链接,JetBrains Rider 将在无需安装的情况下启动该服务。 在这种情况下,该服务将在系统重启之前一直运行。
开始使用 DPA
实际上,DPA 不需要您采取任何额外步骤即可开始使用。 像往常一样工作,只需对您的工作流程进行一些小的调整:
每次运行或调试项目完成后,请注意状态栏中的 DPA 图标。 如果它是红色的,如此处所示
,请单击它并选择 查看问题。查看问题列表。 在此步骤中,您可以:
修复问题后,请再次运行项目,并确保该问题不再出现在 DPA 列表中。
理想情况下,您应该看到绿色的 DPA 图标,如下所示:
。
DPA 的工作原理
如果在执行期间,程序超过了 指定的阈值 (例如,分配的内存大小),则发生分配的该方法将被视为一个问题。 DPA 会将此方法添加到 Dynamic Program Analysis 窗口中的问题列表中。

负责分配的确切代码行会在编辑器中高亮显示。

调用路径上的所有方法和代码行也会被高亮显示。

如果您更改了标记为问题的方法的代码,DPA 会将其视为尝试修复该问题。
如果修复后,问题值降至阈值以下,DPA 会认为问题已修复,并将其从列表中移除。
如果修复后,问题值仍高于阈值,DPA 会使用此新值更新列表中的问题。
如果您未更改标记为问题的方法的代码,DPA 会向您显示新的问题值以及所有运行中的最高问题值。

更详细地说:对于每个问题,DPA 会存储两个值:记录的最大值和上次运行的值。 这可以防止误判 – 一个问题可能会因为低于阈值而从问题列表中消失,但这并不是因为它已被修复,而是因为启动条件发生了变化(例如,程序运行时间较短,未执行所需功能等)。 只有在运行之间您未更改问题背后的代码时,才会显示最大值。
DPA 不会在列表中显示 静音和抑制的问题 ,也不会在编辑器中高亮显示相应的代码。
目前,无法查看完整的问题历史记录。
由于 调试 和 发布 构建彼此不同,DPA 会分别跟踪每个 解决方案构建配置。 Dynamic Program Analysis 窗口显示当前选定构建配置的问题。

ETW 仅在超过 100 KB 分配阈值后才会引发内存分配事件。 因此,DPA 对内存分配问题的粒度级别为 100 KB。
关闭 DPA
如果 'JetBrains ETW Host Service'正在系统中运行,DPA 默认处于启用状态。 要禁用 DPA,请单击状态栏中的 DPA 图标(
或
),然后选择 禁用动态程序分析。