大量のデータをチャンクで転送するC#4.0アプリケーション(単一のプロデューサー/単一のコンシューマー)があります。新しいメモリ割り当てはありませんが、しばらくするとメモリが不足します。
Redgateメモリプロファイラーを使用してメモリのプロファイルを作成しましたが、そこには多くの空きメモリがあります。断片化のため、空きメモリを使用できないと表示されます。
バッファとしてブロッキングコレクションを使用し、メンバーとしてバイト配列を使用します。
BlockingCollection<byte[]> segments = new BlockingCollection<byte[]>(8);
// producer:
segments.Add(buffer);
// consumer:
byte[] buffer = _segments.Take();
管理されたメモリの断片化を回避するにはどうすればよいですか?