当日は私たちのWindowsサービスでたくさんのGen 2コレクションが見られました。GCは第2世代をいつ収集するのですか?
GenはGen1とGen0のみを収集するのではなく、Gen0のみを収集するのではなく、いつ完全収集を行うかを決定しますか?
当日は私たちのWindowsサービスでたくさんのGen 2コレクションが見られました。GCは第2世代をいつ収集するのですか?
GenはGen1とGen0のみを収集するのではなく、Gen0のみを収集するのではなく、いつ完全収集を行うかを決定しますか?
詳細については、http://msdn.microsoft.com/en-us/library/0xy59wtx.aspxとリンクされている記事をお読みください。一般に、gen2は「必要に応じて」収集されます。
Gen2の過剰なコレクションを引き起こす原因の1つは、ラージオブジェクトヒープ(LOH)です。 LOHが満たされると、完全なコレクションがトリガーされます。あなたのアプリケーションが多くの大きなオブジェクト(80K以上)を割り当てたり解放したりするならば、あなたの問題になる可能性があります。
CLR Inside Out: Large Object Heap Uncoveredを参照してください。
サービスでサーバーガベージコレクタを使用することも検討してください。通常、パフォーマンスが向上します(コレクション数が少なくなります)。これをあなたのapp.configファイルに追加してください:
<configuration
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
私たちのサービスは、行うべき作業があるかどうかをチェックし、それをThreadPoolに入れます。私はそれらのThreadPool ThreadsがGen2に行く唯一のものだと思います。大きなオブジェクトは割り当てません。しかし、システムメモリが低い場合、Gen2コレクションが表示されます。マルチコアCPUを使用する場合、AFAIKサーバーモードはデフォルトです。 –
@Periシステムメモリが低い場合は、完全なGCがトリガされます。システムはスペースを必要とする! RAMを追加する可能性を検討したいかもしれません。 – Joe
@Peri:いいえ、サーバーモードはデフォルトではありません。マルチコアを使用するときの同時GCはデフォルトですが、依然としてクライアントGCです。サーバーGCが必要な場合は、app.configファイルでその旨を述べる必要があります。また、大きなオブジェクトを割り当てることはありませんか? 64ビットシステムでは、10,000個のアイテムしか含まれていないリストには、80キロバイトを超えるバッキングアレイが必要です。 –
一般colletionは、以下の1
は、私が行方不明です別のシナリオがあるかもしれませんがありますが、一般的に、それはそれです。最初の1つはです。通常はコレクションをキックオフし、G2を収集するのは(相対的に)G2よりもコストがかかります。
教科書の例については、簡単なシナリオを見てみましょう。
完全なGCは高価で、何も起こっていないことがあります。これは、64GB以上のRAMが利用可能なシステム上にあったことを認め、その必要はありませんでした。
最初の点ではどういう意味ですか?たとえば、<5MBを割り当てると、Gen0(各割り当てごとに?)、Gen1は5〜10MB、Gen2は10MB以上割り当てます。 –
私はこの例を理解していません。私は世代が「満員」ではなく、GC(生きている)を生き残ったときに、オブジェクトが古い世代に移動したと思う。 –
右、GCが発生したときにキーが押され、「完全」であればそれが蹴られます(または上記の2つの理由の1つ)。私は例としてそれを使っていました。 – Joe
多少のメモリを解放するように感じるときでしょうか。システムがアイドル状態のときなどです。ちょうどguessin '。 –