我有一个方法,它接受Stream作为参数:
public void Method(Stream stream)
{
...
}在此方法中,我创建了StreamReader。我应该在using语句中包含StreamReader的用法吗?如果是这样,流将被释放,这是不正确的。在这种情况下,使用流和StreamReader的最佳实践是什么?
发布于 2011-03-28 23:52:47
不-在这种情况下,由调用者进行处理是传统的。
发布于 2011-03-28 23:54:33
在StreamReader上调用Dispose将释放底层Stream。如果这是您想要的,那么将StreamReader包装在using构造中。否则,只需构造StreamReader并将其留给垃圾收集器清理即可。
换句话说,这取决于你的函数是否“取得”了Stream的所有权。
发布于 2011-03-28 23:55:24
在这种情况下,我倾向于写这样的东西和方法的结尾:
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(),但在这种情况下,流修饰器允许您选择是否关闭底层流。它可能看起来像这样:
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;https://stackoverflow.com/questions/5461582
复制相似问题