c# - Disposing FileStream and BinaryReader -
i have class manages access binary file. want open file on first request , keep open until instance of class gets disposed. have implemented so:
public class someservice : idisposable { private binaryreader _reader; public int servicefunction(...) { if (_reader == null) createreader(); // _reader , return result } private void createreader() { var stream = new filestream("myfile", filemode.open, fileaccess.read); _reader = new binaryreader(stream); } public void dispose() { if (_reader != null) _reader.dispose(); } }
i use class way:
using (var service = new someservice()) { foreach (var item in somelist) { // other stuff if (eventuallytrue) { int result = service.servicefunction(item.someproperty); // other stuff } } }
questions:
- is enough call
_reader.dispose()
or necessary dispose filestream explicitely? if need dispose filestream too, can modify
dispose
method this:public void dispose() { if (_reader != null) { if (_reader.basestream != null) _reader.basestream.dispose(); _reader.dispose(); // order of disposing matter here ? } }
or need hold
filestream
in separate class variableprivate filestream _stream
, dispose stream later?
disposing of _reader enough.
but because of peculiar 'feature' of reader, assumes ownership of stream.
so general pattern 2 related or unrelated disposables not do. , therefore store stream _stream , dispose in end too, safe , consistent. won't hurt.
Comments
Post a Comment