你能给我一个在.NET中导致内存碎片的例子吗?

时间:2012-08-29 08:00:59

标签: c# .net memory

我正在努力通过在内存中缓存更多内容来使我们的应用程序更高效。但令我担心的是,我正在阅读的有关大型对象堆在垃圾收集过程中是如何实际压缩的,以及这会导致内存碎片。

我一直在做一些小测试,但似乎我无法引发这个问题。所以这是我的问题:你能告诉我C#中的代码片段,在某些时候会因内存碎片导致失败吗?

1 个答案:

答案 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();
        }