Varia, Stream
per impostazione predefinita non chiama Flush()
nel metodo Dispose
con alcune eccezioni come FileStream
. La ragione di ciò è che alcuni oggetti stream non hanno bisogno della chiamata a Flush
poiché non usano un buffer. Alcuni, come MemoryStream
, sovrascrivono esplicitamente il metodo per garantire che non venga intrapresa alcuna azione (rendendola un no-op).
Ciò significa che se preferisci non avere la chiamata extra, devi controllare se la sottoclasse Stream
che stai utilizzando implementa la chiamata nel metodo Dispose
e se è necessario o meno.
Indipendentemente da ciò, può essere una buona idea di chiamare lo stesso solo per migliorare la leggibilità - simile a come alcuni chiamano Close()
alla fine delle loro dichiarazioni utilizzando:
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();
}
fine di utilizzare chiamate vicine? So solo che smaltisce lo stream e chiamo close methode alla fine ogni volta. –
Non è necessario, Dispose chiuderà sempre lo stream e Close eseguirà prima il flush del flusso. – nos
@FelixCzylwik: se la fine dell'utilizzo non stava chiamando Chiudi, avresti tonnellate di flussi aperti e aprire SQLConnections là fuori ...: D –