2016-09-28 10 views
0

私はGCとProcessMemoryの以下の動作をしています。私のwpfアプリケーションでGarbageCollectionsを分析する方法

enter image description here

これらは、最初の10秒です。ご覧のとおり、私はGCの呼び出しをたくさん持っています。私にとっては、スタート時に作成される小さなオブジェクトがたくさんあるように見えますが、実際にはプログラムで必要とはしません。 何が起こったのか、またはこの動作が正常であるのかを分析するにはどうすればよいですか?

+0

限り、それはチャンクをしないよう、あなたの一般的なIOパフォーマンス(しかし:650メガバイトのプロセスメモリ)あなたはそれを無視することができます。このソフトウェアはすでに非常に複雑で、GCの量は健康に見えます。明らかな問題がなければ、それをそのままにしておきたいかもしれません。 –

+0

私の意見では、アプリケーションの起動には多くの時間がかかります。問題はGCがどれくらいの時間を占めているかです。 – GreenEyedAndy

+1

それから有効な懸念があります。私は時間を取ることができません(今30 +秒と仮定)。ここから開始してください:https://msdn.microsoft.com/en-us/library/ff650691.aspx –

答えて

0

完全なガベージコレクションは非常に高価なので、.NETフレームワークは3つの異なる部分コレクション(世代0,1および2)を使用します。世代0のガベージコレクションは最も頻繁に、世代1は少なく、世代2は最も頻繁に。ガーベジ・コレクター・コレクションの数は通常問題ではなく、ガベージ・コレクターによって決定され、最適化されます。世代1と世代1ともに、世代0のコレクションが多数存在することがあります。これが動作する方法です。

多くのオブジェクトは、世代の低い世代のコレクションから生き残り、より高い世代のコレクションに昇格しています。たとえば、多くのIDisposable型を使用します。世代0のコレクションでは、IDisposableは収集されず、代わりに世代1のコレクションとしてマークされます(収集前にDispose()が実行されるため)。第1世代のコレクションの頻度はそれほど高くないので、世代0のコレクションで多くのオブジェクトが生き残ることは望ましくありません。同様に、第1世代のオブジェクトを第2世代のコレクションに昇格させたくない場合もあります。

Windowsパフォーマンスモニタを使用して、ガベージコレクタの実行率を確認できます。パフォーマンスコンターは.NET CLR Memoryセクションにあります。

PerformanceMonitorGCCounters

関連する問題