Oma*_*mar 24 c# dispose flush stream
注意:我已经阅读了以下两个问题:
我在C#中编码
我正在我的应用程序中构建一个类,它包含一个GetStream()
返回流的主方法(让我们调用它)myWebRequest.GetResponse().GetResponseStream()
主方法GetStream()
返回一个Stream
对象,该对象可用于需要流的任何操作(StreamReader,Bitmap()等).
有没有办法让流在最后一次使用后自动处理(垃圾收集?)而不强迫任何人调用.GetStream()
手动处理它?
你可能会说,我的问题是模糊和笼统的.我对流的理解并不牢固,所以任何链接到有用的文章,提供更深入的视图流,而不是SO问题可以提供.
mqp*_*mqp 33
处理流会关闭它(并且可能没有做太多其他事情.)关闭流将其刷新,并释放与流相关的所有资源,如文件句柄.刷新流将获取尚未写入的任何缓冲数据,并立即将其写出; 一些流在内部使用缓冲,以避免对相对昂贵的资源(如磁盘文件或网络管道)进行大量的小更新.
你需要调用Close
或Dispose
大部分流,或者你的代码是不正确的,因为底层的资源不会被释放供其他人使用,直到垃圾回收器来(谁知道会花多久.) Dispose
优选作为当然; 预计你将把所有一次性物品丢弃在C#中.Flush
在大多数情况下,您可能不必明确调用.
在C#中,Dispose
通过using
块调用是惯用的,这是一个在finally中处理的try-finally块的语法糖,例如:
using (FileStream stream = new FileStream(path))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
在功能上是相同的
FileStream stream;
try
{
stream = new FileStream(path);
// ...
}
finally
{
if (stream != null)
stream.Dispose();
}
Run Code Online (Sandbox Code Playgroud)