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