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