为了账号安全,请及时绑定邮箱和手机立即绑定

我应该为流对象调用Close()还是Dispose()吗?

我应该为流对象调用Close()还是Dispose()吗?

C#
饮歌长啸 2019-11-14 10:35:55
类如Stream,StreamReader,StreamWriter等工具IDisposable界面。这意味着,我们可以Dispose()对这些类的对象调用方法。他们还定义了public一种名为的方法Close()。现在,让我感到困惑的是,一旦完成对象我该怎么称呼?如果我都叫我怎么办?我当前的代码是这样的:using (Stream responseStream = response.GetResponseStream()){   using (StreamReader reader = new StreamReader(responseStream))   {      using (StreamWriter writer = new StreamWriter(filename))      {         int chunkSize = 1024;         while (!reader.EndOfStream)         {            char[] buffer = new char[chunkSize];            int count = reader.Read(buffer, 0, chunkSize);            if (count != 0)            {               writer.Write(buffer, 0, count);            }         }         writer.Close();      }      reader.Close();   }}如您所见,我已经编写了using()构造,该构造自动Dispose()在每个对象上调用方法。但是我也调用Close()方法。这样对吗?请向我建议使用流对象时的最佳做法。:-)
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

该文档说这两种方法是等效的:


StreamReader.Close:Close的此实现调用传递真实值的Dispose方法。


StreamWriter.Close:Close的此实现调用传递真实值的Dispose方法。


Stream.Close:此方法调用Dispose,将其指定为true以释放所有资源。


因此,这两个都同样有效:


/* Option 1 */

using (StreamWriter writer = new StreamWriter(filename)) { 

   // do something


/* Option 2 */

StreamWriter writer = new StreamWriter(filename)

try {

    // do something

}

finally {

    writer.Close();

}

就我个人而言,我会坚持使用第一个选项,因为它包含的“噪音”更少。


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 1324 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信