DA0010: GetHashCode の負荷が高くなっていますDA0010: Expensive GetHashCode

規則 IDRule Id DA0010DA0010
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling methods サンプリングSampling

.NET メモリ.NET Memory
メッセージMessage GetHashCode 関数の負荷を抑える必要があります。メモリを割り当てることはできません。GetHashCode functions should be cheap and not allocate any memory. 可能な場合は、ハッシュ コード関数の複雑さを軽減してください。Reduce complexity of hash code function if possible.
メッセージの種類Message type 警告Warning

原因Cause

型の GetHashCode メソッドの呼び出しがプロファイリング データの大きな割合を占めているか、またはそのメソッドがメモリを割り当てています。Calls to the GetHashCode method of the type are a significant proportion of the profiling data or the method allocates memory.

規則の説明Rule Description

ハッシュは、大きなコレクションの中から特定の項目を簡単に見つけるための手法です。Hashing is a technique for rapidly locating a particular item in a large collection. ハッシュ テーブルは非常に大きくなることがあり、非常に高いアクセス率に対応しなければなりません。そのため、ハッシュ テーブルは極めて効率的にする必要があります。Because hash tables can be very large and have to support very high rates of access, hash tables should be extremely efficient. この要件が意味するところは、.NET Framework の GetHashCode メソッドでメモリを割り当ててはいけないということです。An implication of this requirement is that GetHashCode methods in the .NET Framework should not allocate memory. メモリを割り当てるとガベージ コレクターの負荷が増し、割り当て要求の結果としてガベージ コレクションを実行しなければならなくなると、メソッドに遅延が発生する可能性があります。Allocating memory increases the load on the garbage collector and exposes the method to potential delays if it become necessary to run garbage collection as a result of the allocation request.

違反の修正方法How to Fix Violations

メソッドの複雑さを軽減してください。Reduce the complexity of the method.