4

.Net3.5フレームワークのBinaryFormatterクラスでメモリリークの問題が発生しています。次のメソッドを使用してオブジェクトを逆シリアル化します。このメソッドに渡されるバイト配列のサイズは156MBです。ただし、このメソッドを呼び出した後、2.6GBのジャンプがあります。

このメモリリークの問題について説明しているMSDNの記事を見つけました。http://blogs.msdn.com/b/psirr/archive/2009/11/13/interesting-memory-leak-in-net-3-5-binary-deserialization.aspx

この問題の解決策があるかどうか誰かが知っていますか?.Net 4.0で解決されていますか?

    public static Message DeserializeContent(byte[] content)
    {
        var formatter = new BinaryFormatter();
        Message message;

        using (var stream = new MemoryStream(content))
        {
            message = (Message) formatter.Deserialize(stream);
            stream.Close();
        }
        return message;
    }
4

1 に答える 1

-1

それは面白い。メモリは管理されており、リークが発生した場合でも収集する必要はありませんか? バイナリフォーマッタを破棄したり、ガベージコレクタを強制的に実行させたりしても発生しますか? ただし、リークしたメモリを収集したとしても、メモリを破棄する前に逆シリアル化するのに十分なメモリがない可能性があるため、これは絶対的な解決策ではないことに注意してください...

修正されることを願っています。

于 2010-12-09T01:43:47.783 に答える