我有一个使用C# 4.0编写的单生产者/单消费者应用程序,它以块为单位传输大量数据。尽管没有新的内存分配,但是经过一段时间后我会耗尽内存。
我使用Redgate Memory Profiler对内存进行了分析,发现有很多可用的空闲内存。但由于碎片化,无法使用这些空闲内存。
我使用阻塞集合作为缓冲区,并使用字节数组作为其成员。
我使用Redgate Memory Profiler对内存进行了分析,发现有很多可用的空闲内存。但由于碎片化,无法使用这些空闲内存。
我使用阻塞集合作为缓冲区,并使用字节数组作为其成员。
BlockingCollection<byte[]> segments = new BlockingCollection<byte[]>(8);
// producer:
segments.Add(buffer);
// consumer:
byte[] buffer = _segments.Take();
我该如何避免托管内存碎片化?