2010-12-09 19 views
2

Je constate un problème de fuite de mémoire avec la classe BinaryFormatter dans l'infrastructure .Net 3.5. J'utilise la méthode suivante pour désérialiser un objet. La taille du tableau d'octets transmis à cette méthode est de 156 Mo. Cependant, il y a un saut de 2,6 Go après avoir appelé cette méthode.Problème de fuite de mémoire avec la classe BinaryFormatter dans .Net 3.5

J'ai trouvé cet article sur MSDN qui parle de ce problème de fuite de mémoire. http://blogs.msdn.com/b/psirr/archive/2009/11/13/interesting-memory-leak-in-net-3-5-binary-deserialization.aspx

Est-ce que quelqu'un sait s'il existe une solution à ce problème? Est-il résolu dans .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; 
    } 

Répondre

-1

C'est intéressant. n'est pas la mémoire gérée et même en cas de fuite, ne devrait-elle pas être collectée? Cela arrive-t-il même si vous disposez du formateur binaire ou forcez le garbage collector à s'exécuter? Cependant, même s'il collecte la mémoire qui a fui, gardez à l'esprit que ce n'est pas une solution absolue car il n'y a pas assez de mémoire pour désérialiser avant que la mémoire puisse être éliminée ...

Espérons que cela sera résolu .