.NET Framework の使用に関するパフォーマンス規則.NET Framework Usage Performance Rules

.NET Framework の使用カテゴリのパフォーマンス規則では、最適化できる具体的なメソッド、およびパフォーマンスに問題があるときに調査できる一般的な使用パターン (ガベージ コレクションやロックの競合など) が示されています。Performance rules in the.NET Framework Usage category identify specific methods that can be optimized and also identify more general usage patterns, such as garbage collection and lock contention, that can be investigated for performance issues.

DA0001: StringBuilder を使用して連結してくださいDA0001: Use StringBuilder for concatenations System.String.Concat(String, String) の呼び出しがプロファイル データの大きな割合を占めています。Calls to System.String.Concat(String, String) are a significant proportion of the profiling data. StringBuilder クラスを使用して、複数のセグメントからの文字列を連結することを検討してください。Consider using the StringBuilder class to construct strings from multiple segments.
DA0005: 頻繁な GC2 のコレクションですDA0005: Frequent GC2 collections 比較的多数の .NET メモリ オブジェクトが、ジェネレーション 2 のガベージ コレクションで回収されています。A relatively high number of .NET memory objects are being reclaimed in generation 2 garbage collection. ジェネレーション 1 のコレクションで回収されない有効期間の短いオブジェクトが多すぎる場合、メモリ管理コストが簡単に過剰になる可能性があります。If too many short-lived objects survive generation 1 collection, the cost of memory management can easily become excessive.
DA0006: 値の型で Equals() をオーバーライドしてくださいDA0006: Override Equals() for value types パブリック値型の Equals メソッドまたは等値演算子の呼び出しが、プロファイリング データの大きな割合を占めています。Calls to the Equals method or the equality operators of a public value type are a significant proportion of the profiling data. さらに効率的な方法を実装することを検討してください。Consider implementing a more efficient method.
DA0007: 制御フローでの例外の使用を避けてくださいDA0007: Avoid using exceptions for control flow .NET Framework 例外ハンドラーの多くの部分が、プロファイリング データで呼び出されました。A high rate of .NET Framework exception handlers were called in the profiling data. 他の制御フロー ロジックを使用して、スローされる例外の数を減らすことを検討してください。Consider using other control flow logic to reduce the number of exceptions that are thrown.
DA0010: GetHashCode の負荷が高くなっていますDA0010: Expensive GetHashCode 型の GetHashCode メソッドの呼び出しがプロファイリング データの大きな割合を占めているか、または GetHashCode メソッドがメモリを割り当てています。Calls to the GetHashCode method of the type are a significant proportion of the profiling data or the GetHashCode method allocates memory. メソッドの複雑さを軽減してください。Reduce the complexity of the method.
DA0011: CompareTo の負荷が高くなっていますDA0011: Expensive CompareTo 型の CompareTo メソッドが高コストであるか、またはメソッドがメモリを割り当てています。The CompareTo method of the type is expensive or the method allocates memory. CompareTo メソッドの複雑さを軽減してください。Reduce the complexity of the CompareTo method.
DA0012: リフレクションが頻繁に実行されていますDA0012: Significant amount of Reflection InvokeMemberGetMember など、System.Reflection メソッドの呼び出しか、InvokeMember など、Type メソッドの呼び出しがプロファイリング データの大きな割合を占めています。Calls to the System.Reflection methods such as InvokeMember and GetMember or to Type methods such as InvokeMember are a significant proportion of the profiling data. 可能な場合は、事前バインディングを使用するこれらのメソッドを、依存アセンブリのメソッドに置き換えることを検討してください。When possible, consider replacing these methods with early binding to the methods of dependent assemblies.
DA0013: String.Split/String.Substring が頻繁に使用されていますDA0013: High usage of String.Split or String.Substring System.String.Split メソッドまたは Substring メソッドの呼び出しがプロファイリング データの大きな割合を占めています。Calls to the System.String.Split or Substring methods are a significant portion of the profiling data. 文字列内の部分文字列の存在をテストしている場合、IndexOf または IndexOfAny の利用を検討してください。Consider using IndexOf or IndexOfAny if you are testing for the existence of a substring in a string.
DA0018: 32 ビット アプリケーションがプロセスのマネージ メモリ制限で実行されていますDA0018: 32-bit Application running at process managed memory limits プロファイリングの実行中に収集されたシステム データで、.NET Framework のメモリ ヒープが、32 ビット プロセスでマネージ ヒープが到達可能な最大サイズに近づいたことが示されています。System data that is collected during the profiling run indicates the .NET Framework memory heaps approached the maximum size that the managed heaps can reach in a 32-bit process. .NET メモリ プロファイル方法を使って再度プロファイリングを行い、アプリケーションによるマネージ リソースの使用を最適化することを検討してください。Consider profiling again using the .NET memory profiling method and optimizing the use of managed resources by the application.
DA0021: ジェネレーション 1 のガベージ コレクションが高率ですDA0021: High rate of Gen 1 garbage collections 比較的多数の .NET メモリ オブジェクトが、ジェネレーション 1 のガベージ コレクションで回収されています。A relatively high number of .NET memory objects are being reclaimed in generation 1 garbage collection. ジェネレーション 0 のコレクションで回収されない有効期間の短いオブジェクトが多すぎる場合、メモリ管理コストが簡単に過剰になる可能性があります。If too many short-lived objects survive generation 0 collection, the cost of memory management can easily become excessive.
DA0022: ジェネレーション 2 のガベージ コレクションが高率ですDA0022: High rate of Gen 2 garbage collections 多数の .NET メモリ オブジェクトが、ジェネレーション 2 のガベージ コレクションで回収されています。A high number of .NET memory objects are being reclaimed in generation 2 garbage collection. ジェネレーション 1 のコレクションで回収されない有効期間の短いオブジェクトが多すぎる場合、メモリ管理コストが簡単に過剰になる可能性があります。If too many short-lived objects survive generation 1 collection, the cost of memory management can easily become excessive. このルールは、ロック競合の割合がルール DA0005 の上限しきい値を超えると発生します。This rule fires when the rate of lock contentions exceeds the upper threshold value of rule DA0005.
DA0023: 高い GC CPU 時間DA0023: High GC CPU time プロファイリングの間に収集されたシステム パフォーマンス データで、ガベージ コレクションに費やされた時間がアプリケーション処理時間全体と比較して大きいことが示されています。System performance data that is collected during profiling indicates that the amount of time that is spent in garbage collection is significant compared with the total application processing time.
DA0024: 過剰な GC CPU 時間DA0024: Excessive GC CPU Time プロファイリングの間に収集されたシステム パフォーマンス データで、ガベージ コレクションに費やされた時間がアプリケーション処理時間全体と比較して大き過ぎることが示されています。System performance data that is collected during profiling indicates that the amount of time that is spent in garbage collection is excessively high compared with the total application processing time. このルールは、ガベージ コレクションに費やされた時間がルール DA0023 の上限しきい値を超えると発生します。This rule fires when the amount of time spent in garbage collection exceeds the upper threshold value of rule DA0023.
DA0038: 高率のロック競合DA0038: High Rate of Lock contentions プロファイリング データで収集されたシステム パフォーマンス データが、アプリケーションの実行中に非常に高率のロック競合が発生したことを示しています。System performance data that is collected with the profiling data indicates that a significantly high rate of lock contentions occurred during application execution. 競合の原因を見つけるために、同時実行プロファイル方法を使用して、プロファイリングを再度実行することを検討してください。Consider profiling again using the concurrency profiling method to find the cause of the contentions.
DA0039: 非常に高率のロック競合DA0039: Very High Rate of Lock contentions プロファイリング データで収集されたシステム パフォーマンス データが、アプリケーションの実行中に極端に高率のロック競合が発生したことを示しています。System performance data that is collected with the profiling data indicates that an excessively high rate of lock contentions occurred during application execution. 競合の原因を見つけるために、同時実行プロファイル方法を使用して、プロファイリングを再度実行することを検討してください。Consider profiling again using the concurrency profiling method to find the cause of the contentions. このルールは、ロック競合の割合がルール DA0038 の上限しきい値を超えると発生します。This rule fires when the rate of lock contentions exceeds the upper threshold value of rule DA0038.