2009-08-25 7 views
1

Pour une instance d'objet .Net MemoryStream, dois-je la fermer explicitement après l'avoir utilisée? Ou pas besoin de le fermer? Quelles sont les meilleures pratiques? J'utilise VSTS2008 + .Net 3.5 + C#.Problème de fermeture .Net MemoryStream

Répondre

9

Mieux encore serait d'utiliser Using

using (MemoryStream ms = /*get it using your favorite ctor*/) 
{ 
    // use it here 

    // and now flush and copy to a file stream (for example) 
    ws.Flush(); 
    byte[] buffer = ws.ToArray(); 
    using (Stream stream = new FileStream("fileName", FileMode.Create)) 
     stream.Write(buffer, 0, buffer.Length); 
} 

Un petit rappel - si vous prévoyez d'écrire tout cela dans un autre cours d'eau à la fin, don » t oublier à Flush() (et ne pas laisser la lunette des toilettes).

J'utilise un StreamWriter autour de la ms, pour écrire des données de texte dans la mémoire, et à la fin tout mettre sur le disque en une seule fois. (Je peux aussi changer l'exemple ici pour ce cas, si vous le souhaitez)

+0

"écrivez tout dans un autre flux à la fin" - pouvez-vous me montrer un échantillon s'il vous plaît? Que voulez-vous dire "dans un autre courant à la fin"? – George2

+1

Pourquoi vider pour un flux de mémoire? Le commentaire sur cette méthode est: "Remplace Flush pour qu'aucune action ne soit effectuée." –

+0

Je pense que j'ai copié le code de mon utilisation d'un 'MemoryStream' autour d'un' StreamWriter', et je vidais l'instance 'StreamWriter', pour m'assurer que tout le texte écrit dans" MemoryStream' "avant de lire le tableau. Je me souviens de ne pas rougir au début, et obtenu des fichiers qui ne contenaient pas toutes les données attendues. –