2012-08-15 10 views
30

Podczas korzystania ze strumienia pamięci w instrukcji użycia muszę wywołać zamknięcie? Na przykład potrzebne jest tutaj polecenie ms.Close()?MemoryStream w korzystaniu z instrukcji - czy muszę wywoływać close()

using (MemoryStream ms = new MemoryStream(byteArray)) 
    { 
     // stuff 

     ms.Close(); 
    } 
+0

http://stackoverflow.com/a/234257/490018 –

+0

możliwe dub: http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- stream-flush – sloth

Odpowiedz

52

Nie, tak nie jest.

using zapewnia wywołanie Dispose(), co z kolei wywołuje metodę Close().

Można założyć, że wszystkie rodzaje strumieni są zamykane przez instrukcję using.

Od MSDN:

Podczas korzystania z obiektu, który uzyskuje dostęp do niezarządzanych zasobów, takich jak StreamWriter, dobrą praktyką jest tworzenie instancji z wykorzystaniem rachunku. Instrukcja using automatycznie zamyka strumień i wywołania Usuwaj obiekt, gdy kod, który go używa, zakończył.

+3

Rozumiem, że jest stary, ale chciałbym tylko dodać, że użycie '.Close()' obok 'use' spowoduje również ostrzeżenie o analizie kodu" CA2202: Nie wyrzucaj obiektów wiele razy ". Aby uzyskać więcej informacji, przeczytaj sekcję "Przyczyna" tutaj: http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework,Version% 3Dv4.0) –

+0

Czy nie jest odwrotnie. Że '.Close()' wywoła '.Dispose()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx –

+0

Wykonywanie wywołań Close(), które wywołuje Dispose (boolean). – sloth

6

Kiedy za pomocą strumienia pamięci w użyciu instrukcji muszę zadzwonić blisko?

Nie, nie potrzebujesz. Będzie można nazwać metodą .Dispose() który jest automatycznie o nazwie:

using (MemoryStream ms = new MemoryStream(byteArray)) 
{ 
    // stuff 
} 
+3

@HenkHolterman W rzeczywistości 'Dispose()' wywołuje 'Close()', który z kolei wywołuje 'Dispose (true)'. – sloth

Powiązane problemy