首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StreamReader和Dispose

StreamReader和Dispose
EN

Stack Overflow用户
提问于 2011-03-28 23:47:40
回答 3查看 1.9K关注 0票数 3

我有一个方法,它接受Stream作为参数:

代码语言:javascript
复制
public void Method(Stream stream)
{
...
}

在此方法中,我创建了StreamReader。我应该在using语句中包含StreamReader的用法吗?如果是这样,流将被释放,这是不正确的。在这种情况下,使用流和StreamReader的最佳实践是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-28 23:52:47

不-在这种情况下,由调用者进行处理是传统的。

票数 4
EN

Stack Overflow用户

发布于 2011-03-28 23:54:33

StreamReader上调用Dispose将释放底层Stream。如果这是您想要的,那么将StreamReader包装在using构造中。否则,只需构造StreamReader并将其留给垃圾收集器清理即可。

换句话说,这取决于你的函数是否“取得”了Stream的所有权。

票数 2
EN

Stack Overflow用户

发布于 2011-03-28 23:55:24

在这种情况下,我倾向于写这样的东西和方法的结尾:

代码语言:javascript
复制
streamWriter.Flush(); // Only for writers, not for readers
streamWriter = null; // Show myself and other coders that lack of Dispose is not a mistake but it's intented

值得一提的是,在某些情况下(例如- DeflateStream),您需要调用.Dispose(),但在这种情况下,流修饰器允许您选择是否关闭底层流。它可能看起来像这样:

代码语言:javascript
复制
DeflateStream deflateStream = new DeflateStream(fileReader.BaseStream, CompressionMode.Decompress, true);
BinaryReader deflateReader = new BinaryReader(deflateStream);
var articleText = deflateReader.ReadString();
deflateReader = null;
deflateStream.Close();
deflateStream.Dispose();
deflateStream = null;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5461582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档