次の方法で共有


DA0005: 頻繁な GC2 のコレクションです

規則 ID

DA0005

分類

.NET Framework の使用

プロファイル方法

.NET メモリ

メッセージ

オブジェクトの多くはジェネレーション 2 のガベージ コレクションで収集されています。

メッセージの種類

警告

原因

多数の .NET メモリ オブジェクトが、ジェネレーション 2 のガベージ コレクションで再利用されています。

規則の説明

Microsoft .NET 共通言語ランタイム (CLR: Common Language Runtime) は、自動メモリ管理メカニズムを備えています。このメカニズムは、ガベージ コレクターを使用して、アプリケーションで使用されなくなったオブジェクトのメモリを解放します。 ガベージ コレクターはジェネレーション指向です。これは、多くの割り当てが短時間で終了することを前提としています。 たとえば、ローカル変数の有効期間は短時間で終了します。 新しく作成されたオブジェクトはジェネレーション 0 (gen 0) から始まり、ガベージ コレクションの実行中に破棄されなければジェネレーション 1 に昇格します。その後もアプリケーションによって引き続き使用されていれば、最後はジェネレーション 2 に昇格します。

ジェネレーション 0 のオブジェクトの収集頻度は高く、通常は非常に効率的に収集されます。 ジェネレーション 1 のオブジェクトの収集頻度はそれよりも低くなり、収集効率も下がります。 有効期間の長いジェネレーション 2 のオブジェクトの場合、収集頻度はさらに低くなります。 また、ジェネレーション 2 のコレクション (フル ガベージ コレクションの実行) は、最も負荷のかかる操作になります。

この規則は、ジェネレーション 2 のガベージ コレクションの発生率が高くなりすぎた場合に適用されます。 多数の有効期間が比較的短いオブジェクトが、ジェネレーション 1 のコレクションでは収集されずにジェネレーション 2 のフル コレクションで収集されると、メモリ管理のコストが高くなる可能性があります。 詳細については、MSDN Web サイトの「Rico Mariani's Performance Tidbits (Rico Mariani が紹介するパフォーマンスに関するニュース)」ブログの投稿「Mid-life crisis (ミッドライフ クライシス)」を参照してください。

警告の調査方法

プロファイリング ツール .NET メモリのデータ ビュー レポートを確認して、メモリ割り当てに関するアプリケーションのパターンを把握します。 オブジェクトの有効期間ビュー を使用して、ジェネレーション 2 に残っており、その後そこからクリアされる、プログラムのデータ オブジェクトを確認します。 .NET メモリの割り当てビュー を使用して、これらの割り当てが行われた実行パスを判断します。

ガベージ コレクションのパフォーマンスを向上させる方法の詳細については、Microsoft Web サイトの「ガベージ コレクターの基本とパフォーマンスのヒント」を参照してください。 自動ガベージ コレクションのオーバーヘッドの詳細については、「大きなオブジェクト ヒープの秘密」を参照してください。