我正在努力通过在内存中缓存更多内容来提高我们的应用程序的性能。不过,让我担心的是,我正在阅读有关大型对象堆在垃圾收集期间如何没有真正压缩的所有内容,这可能会导致内存碎片。
我一直在做一些小测试,但似乎我无法引发这个问题。所以这是我的问题:你能给我看一个 C# 中的代码片段,它在某些时候会由于内存碎片而导致失败吗?
尝试查看本文大对象堆的危险中的代码片段,并在 Fill 函数的 catch 块之后执行此代码以分割 LOH,如 cfneese 于 2011 年 11 月 4 日在评论中发布的所述对于 bug大对象堆碎片导致 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();
}