2012-03-26 8 views
7

Ho codice in questo modo:XPathDocument usa il flusso di memoria che è stato costruito dopo la costruzione?

// Take the xml message and turn it into an object 
var bytes = Encoding.ASCII.GetBytes(message); 
var memoryStream = new MemoryStream(bytes); 

XPathDocument xPathDocument = new XPathDocument(memoryStream); 

mi sono reso conto che non mi pulisco il MemoryStream ovunque. Stavo per cambiarlo a questo:

// Take the xml message and turn it into an object 
var bytes = Encoding.ASCII.GetBytes(message); 
var memoryStream = new MemoryStream(bytes); 

XPathDocument xPathDocument; 
using(memoryStream) 
{ 
    xPathDocument = new XPathDocument(memoryStream); 
} 

Ma io non ero sicuro se XPathDocument utilizza il MemoryStream internamente dopo la costruzione. (In tal caso, avrei bisogno di aspettare e smaltirlo dopo che ho finito con lo XPathDocument.)

Qualcuno sa quando posso smaltire questo MemoryStream?

risposta

8

No, questo è un buon cambiamento. Una volta che il flusso è caricato in xml, non ne hai più bisogno.

Beh, spero che sia buono, è notevolmente simile a molto del codice che ho scritto. : D

4

L'intero flusso viene letto e caricato e quindi sì, è possibile smaltire il MemoryStream in questo modo.

D'altra parte, un MemoryStream non ha davvero bisogno di essere Smaltato, è più il principale generale. Se fosse stato un FileStream o NetworkStream il using sarebbe stato critico.

+0

Hmm, solo una buona abitudine, e molte delle cose che scriviamo, provengono da FileStream ora stream clonato. L'utilizzo dell'uso ora è automatico per me in .net, poiché Try Finally è in Delphi. Non farà male da nessuna parte vicino a noi, tanto quanto dimenticare di smaltire qualcosa che dovresti avere è il modo in cui lo guardiamo. –

1

Se si sta utilizzando il memorystream con l'utilizzo del blocco, è preferibile limitare l'ambito della variabile al blocco using, in questo modo si può essere certi che non verrà utilizzato al di fuori di esso, ad esempio:

using (var memorystream = new MemoryStream(bytes)) 
{ 
    xPathDocument = new XPathDocument(memoryStream); 
} 
Problemi correlati