Devo chamar Close () ou Dispose () para objetos de fluxo?

Classes comoStream, StreamReader, StreamWriter etc implementaIDisposable interface. Isso significa que podemos chamarDispose() método em objetos dessas classes. Eles também definiram umpublic método chamadoClose(). Agora isso me confunde, sobre o que devo chamar quando terminar os objetos? E se eu ligar para os dois?

Meu código atual é este:

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();
   }
}

Como você vê, eu escreviusing()onstruções @, que chamam automaticamenteDispose() método em cada objeto. Mas eu também ligo paraClose() métodos. Está certo

Sugira-me as melhores práticas ao usar objetos de fluxo. : -)

exemplo @MSDN não usausing() constrói e chameClose() método:

Como: Baixar arquivos com FTP

Isso é bom

questionAnswers(4)

yourAnswerToTheQuestion