DA0024: 過剰な GC CPU 時間DA0024: Excessive GC CPU Time

規則 IDRule Id DA0024DA0024
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiling method すべてAll
メッセージMessage GC の時間の割合が非常に高くなっています。% Time in GC is very high. ガベージ コレクションのオーバーヘッドが過剰です。There is an excessive amount of garbage collection overhead.
規則の種類Rule type 警告Warning

サンプリング、.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 was collected during profiling indicates that the amount of time spent in garbage collection is excessively high 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 spent in garbage collection is excessively high compared with the total application processing time.

注意

ガーベジ コレクションに費やされた時間の割合が、アプリケーション全体の処理時間と比較して高いが過度ではない場合、この規則ではなく、「DA0023: 高い GC CPU 時間。」の警告が適用されます。When the proportion of time spent in garbage collection is significant but not excessive compared with the total application processing time, the DA0023: High 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.