是不是可以不关闭StreamReader/StreamWriter来保持底层流打开?

Ada*_*ear 17 c# stream

我有一个基本上包装Stream用于读/写的类,但该流预计由该类的使用者管理.为了便于使用,我使用StreamReader和StreamWriter类在流上执行I/O操作.通常情况下,我会将读取器和写入器包装成using块,但我想避免关闭读取器和写入器,因为这样做也会关闭底层流,我必须保持打开状态.

如果我希望调用者管理基础Stream,那么在内存/资源管理方面是否安全不关闭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
    }
}
Run Code Online (Sandbox Code Playgroud)

n8w*_*wrl 4

如果没有人关闭流,那么最终将调用终结器,它应该调用dispose并在GC上关闭它们.但这在资源方面相当不错,因为它会留下任何可能昂贵的资源,直到GC.你的物体存在的时间越长,情况就会越糟,特别是如果它能够保存到第1代甚至2代的藏品中.

如果你能向你的呼叫者提供一些可以隔离它的东西,那肯定会很好.也许你可以从流中缓存一些东西,这样你就可以在向你的调用者提供内容的同时关闭它?

编辑后编辑:现在我看到你的来电者通过你的流来操作,我的答案必须与众不同!很明显,您的调用者应该管理流的生命周期.我最初的印象是,你的班级创建了一个流,并希望调用者管理它.