我正在努力通过在内存中缓存更多内容来使我们的应用程序更高效。但令我担心的是,我正在阅读的有关大型对象堆在垃圾收集过程中是如何实际压缩的,以及这会导致内存碎片。
我一直在做一些小测试,但似乎我无法引发这个问题。所以这是我的问题:你能告诉我C#中的代码片段,在某些时候会因内存碎片导致失败吗?
答案 0 :(得分:2)
尝试查看本文The Dangers of the Large Object Heap中的代码片段,并在Fill函数的catch块之后实现此代码,以便对LOH进行分段,如cfneese在11/04/2011发布的对错误Large Object Heap fragmentation causes OutOfmemoryException的评论:
unsafe
{
var w = new StreamWriter(@".\test.txt");
for (int i = 0; i < count; i++)
{
var handle = GCHandle.Alloc(smallBlocks[i], GCHandleType.Pinned);
w.WriteLine(String.Format("{0,10}\t{1,10}", i, handle.AddrOfPinnedObject()));
handle.Free();
}
w.Close();
}