У меня есть класс, который по существу обертывает Stream для чтения/записи, но этот поток, как ожидается, будет управляться потребителем этого класса. Для простоты использования я использую классы StreamReader и StreamWriter для выполнения операций ввода-вывода в потоке. Обычно я бы обернул читателя и писателя в блоки using
, но я хочу, чтобы не закрывать читателя и писателя, потому что это также закрывает базовый поток, и я должен держать его открытым.
Безопасно ли с точки зрения управления памятью/ресурсами не закрывать StreamReader/StreamWriter, если я ожидаю, что управляющий поток будет управляться вызывающим? Будет ли сборщик и писатель собирать мусор, когда поток явно закрыт в другом месте?
public class Wrapper
{
private Stream _underlyingStream;
public Wrapper(Stream underlyingStream)
{
_underlyingStream = underlyingStream;
}
public string GetValue()
{
_underlyingStream.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(_underlyingStream);
return reader.ReadToEnd(); // we're done, but the stream is not ours to close
}
}