DA0023: 高い GC CPU 時間DA0023: High GC CPU time

規則 IDRule Id DA0023DA0023
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling method すべてAll
メッセージMessage % Time in GC がかなり高いです。% Time in GC is fairly high. アプリケーションの応答に、示唆されている過剰なガベージ コレクションのオーバーヘッドが影響している可能性があります。This indication of excessive amount of garbage collection overhead could be impacting the responsiveness of your application. .NET のメモリ割り当てデータとオブジェクト ライフタイム情報を収集することで、アプリケーションが使用しているメモリ割り当てのパターンを知ることができます。You can gather .NET memory allocation data and object lifetime information to understand the pattern of memory allocation your application uses better.
規則の種類Rule type 情報Informational

サンプリング、.NET メモリ、またはリソース競合メソッドを使用してプロファイリングを行うときは、この規則を呼び出すためのサンプルを少なくとも 10 個収集する必要があります。When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

原因Cause

プロファイリングの間に収集されたシステム パフォーマンス データで、ガベージ コレクションに費やされた時間がアプリケーション処理時間全体と比較して大きいことが示されています。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.

規則の説明Rule Description

Microsoft .NET 共通言語ランタイム (CLR: Common Language Runtime) は、自動メモリ管理メカニズムを備えています。このメカニズムでは、ガベージ コレクターを使用して、アプリケーションが使用しなくなったオブジェクトのメモリを解放します。The Microsoft .NET common language run-time (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.

この規則は、ガベージ コレクションに費やされた時間がアプリケーション処理時間全体と比較して大きい場合、適用されます。This rule fires when the amount of time that is spent in garbage collection is significant compared with the total application processing time.

注意

ガーベジ コレクションに費やされた時間の割合が、アプリケーション全体の処理時間と比較して過度である場合、この規則ではなく、「DA0024: 過剰な GC CPU 時間。」の警告が適用されます。When the proportion of time that is spent in garbage collection is excessive compared with the total application processing time, the DA0024: Excessive GC CPU Time warning fires instead of this rule.

警告の調査方法How to Investigate a Warning

[エラー一覧] ウィンドウに表示されたメッセージをダブルクリックして、プロファイル データの [マーク] ビューに移動します。Double-click the message in the Errors List window to navigate to the Marks View of the profiling data. .NET CLR Memory\% Time in GC 列を探します。Find the .NET CLR Memory\% Time in GC column. マネージ メモリのガベージ コレクションが他のフェーズよりも多い特定のプログラム実行フェーズがあるかどうかを確認します。Determine if there are specific phases of program execution where the overhead of managed memory garbage collection is heavier than other phases. % Time in GC の値と、# of Gen 0 Collections# of Gen 1 Collections# of Gen 2 Collections 値で報告されているガベージ コレクションの割合を比較してください。Compare the values of the % Time in GC value to the rate of garbage collection reported in the # of Gen 0 Collections, # of Gen 1 Collections, # of Gen 2 Collections values.

% Time in GC 値は、アプリケーションの処理時間全体に占めるガベージ コレクションの実行時間を報告します。The % Time in GC value tries to report the amount of time that an application spends performing garbage collection proportional to the total amount of processing. % Time in GC 値が非常に高くても、それが過度なガベージ コレクションのためではない場合もあることに注意してください。Be aware that there are circumstances when the % Time in GC value can report a very high value, but it is not because of excessive garbage collection. % Time in GC 値の計算方法の詳細については、MSDN の「Maoni's Weblog」 (Maoni のブログ) の「Difference Between Perf Data Reported by Different Tools - 4」 (ツールによってレポートされるパフォーマンス データの違い - 4) を参照してください。For more information about the way the % Time in GC value is calculated, see the Difference Between Perf Data Reported by Different Tools - 4 entry of Maoni's Weblog on MSDN. ページ フォールトが発生している場合や、コンピューター上の優先順位の高い処理のためにアプリケーションに割り込みが発生している場合、% Time in GC カウンターにはそれらの遅延が反映されます。If page faults are occurring or the application is preempted by other higher priority work on the machine during garbage collection, the % Time in GC counter will reflect those additional delays.