在using語句中使用內存流時,是否需要調用close?例如ms.Close()是否需要在這裏?使用語句中的MemoryStream - 我需要調用close()
using (MemoryStream ms = new MemoryStream(byteArray))
{
// stuff
ms.Close();
}
在using語句中使用內存流時,是否需要調用close?例如ms.Close()是否需要在這裏?使用語句中的MemoryStream - 我需要調用close()
using (MemoryStream ms = new MemoryStream(byteArray))
{
// stuff
ms.Close();
}
不,它不是。
using
確保將調用Dispose()
,這又調用Close()
方法。
您可以假設所有類型的流正在通過using
聲明關閉。
從MSDN:
當您使用訪問非託管資源,如一個StreamWriter對象,一個好的做法是使用using語句創建實例。 using語句自動關閉流,並在使用該對象的代碼完成時調用Dispose對象。
我意識到這是舊的,但我只想補充說,除'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
是不是相反。那'.Close()'會調用'.Dispose()'? https://msdn.microsoft.com/en-us/library/system.io.stream.close(v=vs.110).aspx – 2017-08-08 09:31:41
Dispose()調用Dispose(boolean)調用Close()。 – sloth 2017-08-08 20:30:29
當在使用語句中使用一個內存流,我需要調用close?
不,你不需要。它將被自動調用的.Dispose()
方法調用:
using (MemoryStream ms = new MemoryStream(byteArray))
{
// stuff
}
@HenkHolterman實際上'Dispose()'調用'Close()',然後調用'Dispose(true)'。 – sloth 2012-08-15 12:02:12
http://stackoverflow.com/a/234257/490018 – 2012-08-15 11:13:55
可能的配音:http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and- stream-flush – sloth 2012-08-15 11:16:20