Classes telles que Stream
, StreamReader
, StreamWriter
etc outils IDisposable
interface. Cela signifie que nous pouvons appeler la Dispose()
méthode sur les objets de ces classes. Ils ont également défini une public
méthode appelée Close()
. Maintenant, cela me trouble, que dois-je appeler une fois que j'ai fini avec les objets? Et si j'appelle les deux?
Mon code actuel est le suivant:
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();
}
}
Comme vous le voyez, j'ai écrit des using()
constructions, qui appellent automatiquement la Dispose()
méthode sur chaque objet. Mais j'appelle aussi des Close()
méthodes. Est ce juste?
Veuillez me suggérer les meilleures pratiques lors de l'utilisation d'objets de flux. :-)
L'exemple MSDN n'utilise pas les using()
constructions et la Close()
méthode d' appel :
Est-ce bien?
using (MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream()) { }
. Je veux dire comme ça où vous pouvez redéfinir le type:using (MemoryStream ms = new MemoryStream()) using (FileStream fs = File.OpenRead("c:\\file.txt")) { }