2009-08-25 14 views
1

Muss ich eine .Net MemoryStream Objektinstanz explizit nach der Verwendung schließen? Oder keine Notwendigkeit, es zu schließen? Welches sind die besten Praktiken?.Net MemoryStream schließen Problem

Ich verwende VSTS2008 + .Net 3.5 + C#.

Antwort

9

Noch besser wäre es würde 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); 
} 

eine kleine Erinnerung verwenden - wenn Sie planen, alles in einen anderen Strom am Ende, don‘zu schreiben t vergessen Sie zu Flush() (Und lassen Sie den Toilettensitz nicht oben).

Ich benutze einen StreamWriter um die ms, um Textdaten in den Speicher zu schreiben, und am Ende alles auf CD in einem Rutsch. (Ich kann das Beispiel hier auch zu diesem Fall ändern, wenn Sie möchten)

+0

"schreibe alles am Ende in einen anderen Stream" - kannst du mir bitte eine Probe zeigen? Was meinst du "in einen anderen Stream am Ende"? – George2

+1

Warum für einen Speicherstream spülen? Der Kommentar zu dieser Methode lautet: "Überschreibt Flush, sodass keine Aktion ausgeführt wird." –

+0

Ich denke, ich habe den Code aus meiner Verwendung eines 'MemoryStream' um einen' StreamWriter' kopiert und ich habe die 'StreamWriter' - Instanz gelöscht, um sicherzustellen, dass der gesamte geschriebene Text "innerhalb" des 'MemoryStream' liegt Array. Ich erinnere mich, nicht zuerst zu löschen, und habe Dateien, die nicht alle erwarteten Daten enthalten. –