5

より多くのものをメモリにキャッシュすることで、アプリケーションのパフォーマンスを向上させようとしています。しかし、私が心配しているのは、ガベージ コレクション中に大きなオブジェクト ヒープが実際には圧縮されておらず、これがメモリの断片化を引き起こす可能性があることについて読んでいることだけです。

私はいくつかの小さなテストを行ってきましたが、この問題を引き起こすことはできないようです. では、私の質問は次のとおりです。ある時点でメモリの断片化が原因でエラーが発生する C# のコード スニペットを見せてもらえますか?

4

1 に答える 1

2

2011 年 11 月 4 日にコメントで投稿された cfneese によって概説されているように、この記事「大きなオブジェクト ヒープの危険性」のコード スニペットを見て、Fill 関数の catch ブロックの直後にこのコードを実装して、LOH をフラグメント化してみてください。ラージ オブジェクト ヒープの断片化により 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();
        }
于 2012-08-29T08:52:05.880 に答える