注意:我已经阅读了以下两个问题:Can you explain the concept of streams? 和 C# using streams。我正在使用C#进行编码。
1. 在几乎所有使用流的代码示例中,都会调用.Dispose()、.Flush()、.Close()这三个函数。 a. 对于流的概念,这些函数能达到什么目的? b. 如果我没有对存储在变量中的流进行处理,那么我的应用程序是否存在泄漏? c. 为什么需要调用这些函数?我看过一些不这样做也能完成任务的代码示例(没有明显的错误)。
2. 我当前正在构建一个类,其中包含一个主要方法(我们称之为
正如你可能已经注意到的,我的问题比较笼统和一般化。我对流的理解还不够扎实,因此感谢提供任何有关流的深入文章的链接。
1. 在几乎所有使用流的代码示例中,都会调用.Dispose()、.Flush()、.Close()这三个函数。 a. 对于流的概念,这些函数能达到什么目的? b. 如果我没有对存储在变量中的流进行处理,那么我的应用程序是否存在泄漏? c. 为什么需要调用这些函数?我看过一些不这样做也能完成任务的代码示例(没有明显的错误)。
2. 我当前正在构建一个类,其中包含一个主要方法(我们称之为
GetStream()
),通过myWebRequest.GetResponse().GetResponseStream()
返回一个流。
主要方法GetStream()
返回一个Stream
对象,可用于需要流的任何操作(StreamReader、Bitmap()等)。
3. 是否有一种方式可以自动处理最后一次使用后的流(垃圾收集),而无需强制调用.GetStream()
的任何人手动处理它?正如你可能已经注意到的,我的问题比较笼统和一般化。我对流的理解还不够扎实,因此感谢提供任何有关流的深入文章的链接。
if (stream is IDisposable) ((IDisposable) stream).Dispose ();
- GonzaloDispose
,显式关闭流也是一个好主意。关闭流可能需要执行不能保证成功的操作;当出现这些问题时,Close
的实现通常会抛出异常,而一些Dispose
实现可能会压制这样的异常(吞噬这样的异常是邪恶的,但允许它们从Dispose
传播出去通常会破坏先前的异常,这也是邪恶的;实现因考虑哪种邪恶更小而不同)。 - supercatusing
块直接利用 IDisposable 接口,在作用域退出时调用Dispose()
方法:https://msdn.microsoft.com/zh-cn/library/system.idisposable(v=vs.110).aspx - Dagrooms