Фрагментация кучи при использовании байтовых массивов

У меня есть приложение C # 4.0 (один производитель / один потребитель), которое передает огромное количество данных кусками. Хотя нового распределения памяти нет, у меня заканчивается память через некоторое время.

Я профилировал память с помощью профилировщика памяти Redgate, и там много свободной памяти. В нем говорится, что свободная память не может быть использована из-за фрагментации.

Я использую блокирующую коллекцию в качестве буфера и байтовые массивы в качестве членов:

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

Как мне избежать управляемой фрагментации памяти?

17
задан John Saunders 20 April 2011 в 17:22
поделиться