Heap-Fragmentierung bei der Verwendung von byte-arrays

Ich habe ein C# 4.0-Anwendung (single-producer/single consumer), die transfers riesige Menge von Daten in Blöcken. Es gibt zwar keine neue Speicherzuweisung I run out of memory nach einer Weile.

Ich profilierte Speicher mit Redgate Speicher-profiler und es gibt eine Menge freien Speicher gibt. Es sagt, dass der freie Speicher nicht eingesetzt werden, weil der Fragmentierung.

Verwende ich eine Blockierung Auflistung als Puffer-und byte-arrays als Mitglieder:

BlockingCollection<byte[]> segments = new BlockingCollection<byte[]>(8);
//producer:
segments.Add(buffer);
//consumer:
byte[] buffer = _segments.Take();

Wie kann ich verhindern, dass ich es geschafft die Fragmentierung des Speichers?

InformationsquelleAutor Xaqron | 2011-04-17
Schreibe einen Kommentar