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

类如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()方法。这样对吗?


请向我建议使用流对象时的最佳做法。:-)


饮歌长啸
浏览 1329回答 3
3回答

蝴蝶不菲

该文档说这两种方法是等效的: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();}就我个人而言,我会坚持使用第一个选项,因为它包含的“噪音”更少。
打开App,查看更多内容
随时随地看视频慕课网APP