Проблема утечки памяти с классом BinaryFormatter в .Net 3.5 - PullRequest
4 голосов
/ 09 декабря 2010

Я вижу проблему утечки памяти с классом BinaryFormatter в .Net 3.5 framework.Я использую следующий метод для десериализации объекта.Размер байтового массива, передаваемого этому методу, составляет 156 МБ.Однако после вызова этого метода наблюдается скачок в 2,6 Гб.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;
    }

1 Ответ

0 голосов
/ 09 декабря 2010

Это интересно.разве память не управляется и даже в случае утечки не должна ли она быть собрана?Это происходит, даже если вы утилизируете двоичный форматер или заставляете сборщик мусора работать?Однако, даже если он собирает утечку памяти, имейте в виду, что это не абсолютное решение, так как может быть недостаточно памяти для десериализации до того, как память может быть удалена ...

Надеюсь, что она получитнеподвижная.

...