Должен ли я вызвать 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()
методы. Это правильно?
Пожалуйста, предложите мне лучшие практики при использовании потоковых объектов. :-)
MSDN пример не используетusing()
конструирует и зоветClose()
метод:
Это хорошо?