У меня есть приложение C # 4.0 (один производитель / один потребитель), которое передает огромное количество данных кусками. Хотя нового распределения памяти нет, у меня заканчивается память через некоторое время.
Я профилировал память с помощью профилировщика памяти Redgate, и там много свободной памяти. В нем говорится, что свободная память не может быть использована из-за фрагментации.
Я использую блокирующую коллекцию в качестве буфера и байтовые массивы в качестве членов:
BlockingCollection<byte[]> segments = new BlockingCollection<byte[]>(8);
// producer:
segments.Add(buffer);
// consumer:
byte[] buffer = _segments.Take();
Как мне избежать управляемой фрагментации памяти?