2012-08-15 2 views
30

При использовании потока памяти в операторе using мне нужно вызвать close? Например, здесь требуется ms.Close()?MemoryStream in Using Statement - Мне нужно вызвать close()

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

     ms.Close(); 
    } 
+0

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

+0

возможно даб: http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- stream-flush – sloth

ответ

52

Нет, это не так.

using гарантирует, что будет вызываться Dispose(), что в свою очередь вызывает метод Close().

Вы можете предположить, что все виды потоков закрываются оператором using.

От MSDN:

При использовании объекта, который получает доступ неуправляемые ресурсы, такие как StreamWriter, хорошая практика, чтобы создать экземпляр с помощью заявления. Оператор using автоматически закрывает поток и вызывает Dispose на объекте, когда код, который его использует, завершил.

+3

Я понимаю, что это старый, но я хотел бы добавить, что использование '.Close()' в дополнение к 'use' также вызовет предупреждение анализа кода« CA2202: не удалять объекты несколько раз ». Для получения дополнительной информации прочитайте раздел «Причина» здесь: http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework,Version% 3Dv4.0) –

+0

Разве это не так. Этот '.Close()' будет вызывать '.Dispose()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx –

+0

Dispose() вызывает функцию Close(), которая вызывает Dispose (boolean). – sloth

6

При использовании потока памяти в использовании заявления мне нужно позвонить близко?

Нет, вам не нужно. Он будет называться по .Dispose() метод, который вызывается автоматически:

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

@HenkHolterman Фактически 'Dispose()' вызывает 'Close()', который в свою очередь вызывает 'Dispose (true)'. – sloth

Смежные вопросы