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

規則 IDRuleId DA0005DA0005
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling method .NET メモリ.NET Memory
メッセージMessage オブジェクトの多くはジェネレーション 2 のガベージ コレクションで収集されています。Many of your objects are being collected in generation 2 garbage collection.
メッセージの種類Message type 警告Warning


多数の .NET メモリ オブジェクトが、ジェネレーション 2 のガベージ コレクションで回収されています。A high number of .NET memory objects are being reclaimed in generation 2 garbage collection.

規則の説明Rule description

Microsoft .NET 共通言語ランタイム (CLR: Common Language Runtime) は、自動メモリ管理メカニズムを備えています。このメカニズムでは、ガベージ コレクターを使用して、アプリケーションが使用しなくなったオブジェクトのメモリを解放します。The Microsoft .NET common language runtime (CLR) provides an automatic memory management mechanism that uses a garbage collector to reclaim memory from objects that the application no longer uses. ガベージ コレクターはジェネレーション指向です。これは、多くの割り当てが短時間で終了することを前提としています。The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. たとえば、ローカル変数の有効期間は短時間です。Local variables, for example, should be short-lived. 新しく作成されたオブジェクトはジェネレーション 0 (gen 0) から始まり、ガベージ コレクションの実行中に破棄されなければジェネレーション 1 に昇格します。その後もアプリケーションによって引き続き使用されていれば、最後はジェネレーション 2 に昇格します。Newly created objects start in generation 0 (gen 0), and then they progress to generation 1 when they survive a garbage collection run, and finally transition to generation 2 if the application still uses them.

ジェネレーション 0 のオブジェクトの収集頻度は高く、通常は非常に効率的に収集されます。Objects in generation 0 are collected frequently and usually very efficiently. ジェネレーション 1 のオブジェクトの収集頻度はそれよりも低くなり、収集効率も下がります。Objects in generation 1 are collected less frequently and less efficiently. 有効期間の長いジェネレーション 2 のオブジェクトの場合、収集頻度はさらに低くなります。Finally, long-lived objects in generation 2 should be collected even less frequently. また、ジェネレーション 2 のコレクション (フル ガベージ コレクションの実行) は、最も負荷のかかる操作になります。Generation 2 collection, which is a full garbage collection run, is also the most expensive operation.

この規則は、ジェネレーション 2 のガベージ コレクションの発生率が高くなりすぎた場合に適用されます。This rule fires when proportionally too many generation 2 garbage collections have occurred. 有効期間が比較的短いオブジェクトの多くが、ジェネレーション 1 のコレクションでは収集されずにジェネレーション 2 のコレクションで収集される場合、メモリ管理のコストが簡単に高くなる可能性があります。If too many relatively short-lived objects survive generation 1 collection but are then able to be collected in a generation 2 full collection, the cost of memory management can easily become excessive. 詳細については、MSDN Web サイトの「Rico Mariani's Performance Tidbits」 (Rico Mariani のパフォーマンスに関する話題) の「Mid-life crisis」 (有効期間半ばでの危機) の投稿を参照してください。For more information, see the Mid-life crisis post on the Rico Mariani's Performance Tidbits on the MSDN Web site.

警告の調査方法How to investigate a warning

.NET メモリのデータ ビュー レポートを確認して、メモリ割り当てに関するアプリケーションのパターンを把握します。Review the .NET Memory Data Views reports to understand the application's pattern of memory allocation. オブジェクトの有効期間ビューを使用して、ジェネレーション 2 に残っており、その後そこから解放される、プログラムのデータ オブジェクトを確認します。Use the Object Lifetime View to determine which of the program's data objects are surviving into generation 2 and then being reclaimed from there. 割り当てビューを使用して、これらの割り当てが行われた実行パスを判断します。Use the Allocations View to determine the execution path that resulted in these allocations.

ガベージ コレクションのパフォーマンスの向上の方法の詳細については、Microsoft Web サイトの「ガベージ コレクターの基本とパフォーマンスのヒント」を参照してください。For information about how to improve garbage collection performance, see Garbage Collector Basics and Performance Hints on the Microsoft Web site. 自動ガベージ コレクションのオーバーヘッドについては、「Large Object Heap Uncovered」 (大きなオブジェクト ヒープの秘密) を参照してください。For information about the overhead of automatic garbage collection, see Large Object Heap Uncovered.