.NET Framework 使用性能规则

.NET Framework 使用类别中的性能规则标识可以优化的特定方法,还标识可以就性能问题进行调查的更常规的使用模式,如垃圾回收和锁争用。

DA0001:使用 StringBuilder 进行串联

String.Concat(String, String) 的调用在分析数据中占很大比例。 请考虑使用 StringBuilder 类根据多个段构造字符串。

DA0005:频繁进行 GC2 收集

在第 2 代垃圾回收中正在回收相对大量的 .NET 内存对象。 如果在第 1 代回收后仍然存在太多生存期较短的对象,则内存管理的成本可能很容易会变得过高。

DA0006:重写值类型的 Equals()

对 Equals 方法或公共值类型的相等运算符的调用在分析数据中占很大比例。 请考虑实施更有效的方法。

DA0007:避免使用控制流异常

分析数据中 .NET Framework 异常处理程序的调用率高。 请考虑使用其他控制流逻辑来减少引发的异常数。

DA0010:高开销 GetHashCode

对该类型的 GetHashCode 方法的调用在分析数据中占很大比例或 GetHashCode 方法分配内存。 降低此方法的复杂性。

DA0011:高开销的 CompareTo

该类型的 CompareTo 方法开销巨大或此方法分配内存。 降低 CompareTo 方法的复杂性。

DA0012:大量反射

System.Reflection 方法(如 InvokeMemberGetMember)或 Type 方法(如 InvokeMember)的调用在分析数据中占很大比例。 如果可能,请考虑用对依赖程序集的方法的早期绑定替代这些方法。

DA0013:String.Split 或 String.Substring 的使用率高

String.SplitSubstring 方法的调用在分析数据中占很大比例。 如果要测试字符串中是否存在子字符串,请考虑使用 IndexOfIndexOfAny

DA0018:运行的 32 位应用程序达到了进程托管内存的限制

分析运行期间收集的系统数据指示 .NET Framework 内存堆已接近托管堆在 32 位进程中可以达到的最大大小。 请考虑使用 .NET 内存分析方法重新进行分析,并优化应用程序对托管资源的使用。

DA0021:第 1 代垃圾回收的速率很高

在第 1 代垃圾回收中正在回收相对大量的 .NET 内存对象。 如果在第 0 代回收后仍然存在太多生存期较短的对象,则内存管理的成本可能很容易会变得过高。

DA0022:第 2 代垃圾回收的速率很高

在第 2 代垃圾回收中正在回收大量 .NET 内存对象。 如果在第 1 代回收后仍然存在太多生存期较短的对象,则内存管理的成本可能很容易会变得过高。 当锁争用的发生率超过规则 DA0005 的上限阈值时,将激发此规则。

DA0023:垃圾回收占用的 CPU 时间很多

分析期间收集的系统性能数据表明,与应用程序总处理时间相比,垃圾回收所用时间很长。

DA0024:垃圾回收占用的 CPU 时间过多

分析期间收集的系统性能数据表明,与应用程序总处理时间相比,垃圾回收所用时间过长。 当垃圾回收所用时间超过规则 DA0023 的上限阈值时,将激发此规则。

DA0038:锁争用率很高

随分析数据一起收集的系统性能数据表明应用程序执行期间锁争用的发生率很高。 请考虑使用并发分析方法重新进行分析,以找出争用的原因。

DA0039:锁争用率非常高

随分析数据一起收集的系统性能数据表明,应用程序执行期间锁争用的发生率过高。 请考虑使用并发分析方法重新进行分析,以找出争用的原因。 当锁争用的发生率超过规则 DA0038 的上限阈值时,将激发此规则。