2012-01-03 10 views
3

この質問に対する文書化された回答は見つかりません。 SqlXmlオブジェクトを使用してStmlProcにXMLを渡すと、作成しているXmlTextReaderを処理するのは誰ですか?ADO.NETでSQLXMLを使用すると、誰が処分する必要がありますか?

これまでに見つかったことから、コンストラクタはすでに渡しているxmlのコピーを作成するので、SqlXmlオブジェクトを作成した直後に読者を処分することができます。しかし、読者があとでAD.netで使用されるかどうかわからないので、これは単なる推測です。

TIA マーティン

答えて

2

あなたの仮定が正しいです。 SqlXmlのコンストラクタは、メモリストリームにXmlReaderの内容を格納します。これは、中に渡されたのXmlReaderへの参照を保持していない

逆コンパイルSQLXMLコンストラクタ:。

public SqlXml(XmlReader value) 
{ 
    if (value == null) 
    { 
     this.SetNull(); 
     return; 
    } 
    this.m_fNotNull = true; 
    this.firstCreateReader = true; 
    this.m_stream = this.CreateMemoryStreamFromXmlReader(value); 
} 

は、このようにあなたがXmlTextReaderクラスの処分またはそれはGC'edされるまで待つ必要があります。前者は、より慣用的なので、通常は好まれます。