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