2012-03-26 26 views
7

私はこのようなコードを持っている: XPathDocumentは構築後に構築されるメモリストリームを使用しますか?

// 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); 

が、私はどこでも MemoryStreamをクリーンアップしていないことに気づきました。私はこれにそれを変更するつもりだった。

// 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); 
} 

しかしXPathDocumentは、建設後に内部MemoryStreamを使用している場合、私はわかりませんでした。もしそうなら、私はXPathDocumentですべて完了した後で待つ必要があります。

私はこれを処分することができます誰でも知っていますか?MemoryStream

答えて

8

いいえいい変化です。ストリームがxmlにロードされると、それ以上は必要ありません。

私はそれが良いと思っています。私が書いた多くのコードと非常によく似ています。 :D

4

ストリーム全体が読み込まれているので、このようにMemoryStreamを廃棄することができます。

一方、MemoryStreamは実際にはDisposedである必要はありませんが、一般的なプリンシパルです。 FileStreamまたはNetworkStreamの場合はusingが重要です。

+0

ええと、本当に良い習慣、私たちが書いているものの多くは、FileStreamまたはクローンストリームから来ています。 TryをDelphiで試してみることで、usingを使用していることが.netで私にとっては自動的になりました。それはあなたが持っているべきであるものを処分するのを忘れるほど、どこにでも傷つけることはありません。 –

1

とにかくブロックを使用してmemorystreamを使用している場合は、変数のスコープをusingブロックに限定することをお勧めします。これは、ブロックの外側で使用されないことを保証します。

using (var memorystream = new MemoryStream(bytes)) 
{ 
    xPathDocument = new XPathDocument(memoryStream); 
} 
関連する問題