It varies, Stream
by default does not call Flush()
in the Dispose
method with a few exceptions such as FileStream
. The reason for this is that some stream objects do not need the call to Flush
as they do not use a buffer. Some, such as MemoryStream
explicitly override the method to ensure that no action is taken (making it a no-op).
This means that if you'd rather not have the extra call in there then you should check if the Stream
subclass you're using implements the call in the Dispose
method and whether it is necessary or not.
Regardless, it may be a good idea to call it anyway just for readability - similar to how some people call Close()
at the end of their using statements:
using (FileStream fS = new FileStream(params))
using (CryptoStream cS = new CryptoStream(params))
using (BinaryWriter bW = new BinaryWriter(params))
{
doStuff();
//from here it's just readability/assurance that things are properly flushed.
bW.Flush();
bW.Close();
cS.Flush();
cS.Close();
fS.Flush();
fS.Close();
}