缩小 DPA 范围
在某些情况下,您可能希望从 DPA 问题列表中排除某些问题。
主要情况包括:
- 这不是一个问题
有时 DPA 会将某个特定方法标记为问题,尽管一切都按预期工作。 例如,一个方法可能会分配大量内存,这并不是因为代码设计不良,而是因为当前用例需要这样做。 如果只是少数方法,最好的解决方案是 抑制这些问题。 如果您遇到大量误报,那么可能更好的方法是 提高问题阈值。
- 您不是此代码的所有者或目前对分析它不感兴趣
大型解决方案包含数百个项目,许多人同时在这些项目上工作。 DPA 允许您 从分析中排除解决方案的特定部分 ,以便您只保留与当前工作相关的问题。
- 此问题已被修复
一种罕见的情况是,您已经修复了问题,但尚未再次运行/调试解决方案。 如果您希望此类问题从列表中隐藏,您可以 将问题标记为已修复。
简要总结:
抑制问题
要抑制一个问题,您必须使用 SuppressMessage 属性标记相应的方法。 抑制问题的主要好处是该属性设置在源代码中,因此可以通过 VCS 共享。 设置属性的最简单方法是使用上下文操作。
在编辑器中,找到您想要抑制的方法。 请注意,
SuppressMessage属性使 DPA 忽略的不仅是方法本身的内存分配,还包括所有子调用中的分配。将光标放在 DPA 高亮显示的行上,然后按 Alt+Enter 。
在上下文操作列表中,选择 抑制 {内存分配 | 数据库} 问题 ,然后选择您希望在当前调用子树中抑制的内容:仅选定的问题、此类型的所有问题或所有问题。

您可以手动设置 SuppressMessage 属性。 例如:
这里:
"ReSharper.DPA"是所需的属性类别。checkId指定必须抑制的问题类型(描述是可选的):"DPA0001:内存分配问题":任何内存分配问题。"DPA0002:在 SOH 中进行过多的内存分配":分配到小对象堆。"DPA0003:在 LOH 中进行过多的内存分配":分配到大对象堆。"DPA0004:闭包对象分配":因闭包导致的分配。"DPA0005:数据库问题":任何数据库问题。"DPA0006:大量数据库命令":大量数据库命令执行。"DPA0007:大量数据库记录":数据库响应中的大量记录。"DPA0008:大量数据库连接":大量同时数据库连接。"DPA0009:数据库命令执行时间过长":长时间的命令执行。
MessageId允许您通过问题值缩小属性的范围。 您应该使用键值对列表设置范围过滤器:"key1:value1;key2:value2;..."可用的键如下:类型:EXACT_FQN:抑制分配指定类型对象的问题。EXACT_FQN是类型的全名,包括命名空间和所有泛型类型的替代。大小:值 "B"、"KB"、"MB"、"GB"、"TB":如果分配对象的总大小小于值,则抑制分配问题。count:如果对象(命令、记录或连接)的总数小于值,则抑制数据库问题。时间:如果命令执行时间(以毫秒为单位)小于值,则抑制数据库命令执行时间问题。
例如:
"类型:System.Object;类型:System.String;大小:500MB"此过滤器意味着 DPA 必须抑制与
System.Object或System.String类型对象的分配相关的所有问题,除非分配对象的总大小小于 500MB。
从分析中排除代码
当您对分析代码的某些部分不感兴趣时,可能需要排除。 您可以排除特定的进程、模块、类和方法:相关问题将从 Dynamic Program Analysis 窗口和编辑器中隐藏。 请注意,您仅为自己排除代码:排除的问题不会传播到 VCS。
从动态程序分析中排除代码
打开 。
在 筛选器 中,点击
添加 ... ,位于所需过滤规则旁边:
代码分析的唯一范围 :指定要包含在动态分析中的进程、模块、类和/或方法。 所有其他代码项将被排除。 代码项是彼此独立过滤的。 例如,您可以指定一个方法,并为模块和类保留星号
*,以仅包含所有模块和类中具有指定名称的方法。代码分析的排除范围 :指定要从动态分析中排除的进程、模块、类和/或方法。 代码项是彼此独立过滤的。
将问题标记为已修复
将问题标记为已修复与排除类似。 主要区别在于排除是永久的,而“标记为已修复”会隐藏问题,直到您运行/调试解决方案:如果问题实际上没有修复,DPA 会将其返回到问题列表中。
打开Dynamic Program Analysis 窗口。
选择问题,按 Delete 或在上下文菜单中选择 忽略 | 标记为已修复。
更改问题阈值
DPA 仅在检查值超过阈值时才将方法标记为问题。 例如,在运行期间,该方法分配到 LOH 55 MB,而阈值为 50 MB。 因此,消除误报的最简单方法是提高相应的阈值。 请注意,没有通用的阈值:根据当前的执行上下文,您的应用程序可能会分配不同数量的内存。 例如,您的应用程序处理的数据大小可能会因运行而异。
您可以在 阈值 选项卡的 Dynamic Program Analysis 窗口中为每种问题类型设置阈值。 默认阈值为:
闭包对象:50 MB
大对象堆:50 MB
小对象堆:100 MB
数据库命令时间:500 毫秒
数据库连接:10
数据库命令:50
数据库记录:100
MVC 操作:500 毫秒
Razor 页面处理程序:500 毫秒
Razor 视图组件:300 毫秒
打开Dynamic Program Analysis 窗口。
请执行以下操作之一:
选择超过当前阈值的问题,在上下文菜单中选择 忽略 | 为 ... 设置新阈值。 这将把相应的阈值设置为略高于问题分配值。
切换到 阈值 选项卡,并为所需的问题类型设置新的阈值。