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

Dav*_*nde 5 .net c# memory

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

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

chr*_*dam 2

尝试查看本文《大对象堆的危险》中的代码片段,并在 Fill 函数的 catch 块之后实现此代码以对 LOH 进行分段,如 cfneese 在 2011 年 11 月 4 日发布的评论中所述对于大对象堆碎片导致 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();
        }
Run Code Online (Sandbox Code Playgroud)