2012-08-15 28 views
30

在using語句中使用內存流時,是否需要調用close?例如ms.Close()是否需要在這裏?使用語句中的MemoryStream - 我需要調用close()

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

     ms.Close(); 
    } 
+0

http://stackoverflow.com/a/234257/490018 – 2012-08-15 11:13:55

+0

可能的配音:http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- stream-flush – sloth 2012-08-15 11:16:20

回答

52

不,它不是。

using確保將調用Dispose(),這又調用Close()方法。

您可以假設所有類型的流正在通過using聲明關閉。

MSDN

當您使用訪問非託管資源,如一個StreamWriter對象,一個好的做法是使用using語句創建實例。 using語句自動關閉流,並在使用該對象的代碼完成時調用Dispose對象

+3

我意識到這是舊的,但我只想補充說,除'using'外,使用'.Close()'還將導致代碼分析警告「CA2202:不要多次處理對象」。有關更多信息,請閱讀「原因」一節:http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=zh-CN&k=k(CA2202);k(TargetFrameworkMoniker-.NETFramework,Version% 3Dv4.0) – 2013-11-18 22:50:35

+0

是不是相反。那'.Close()'會調用'.Dispose()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx – 2017-08-08 09:31:41

+0

Dispose()調用Dispose(boolean)調用Close()。 – sloth 2017-08-08 20:30:29

6

當在使用語句中使用一個內存流,我需要調用close?

不,你不需要。它將被自動調用的.Dispose()方法調用:

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

@HenkHolterman實際上'Dispose()'調用'Close()',然後調用'Dispose(true)'。 – sloth 2012-08-15 12:02:12

相關問題