2012-01-03 1 views
3

Я не могу найти документально подтвержденный ответ на этот вопрос. Если я использую объект SqlXml для передачи xml в StoredProc, который отвечает за удаление XmlTextReader, который я создаю?с использованием SQLXML в ADO.NET, кому нужно распоряжаться?

Из того, что я нашел до сих пор, конструктор уже создает копию xml, с которой я перехожу, поэтому я предполагаю, что я могу избавиться от читателя сразу после создания объекта SqlXml. Но это всего лишь предположение, потому что я не знаю, будет ли читатель позже использоваться ado.net.

ТИА Martin

ответ

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. Первый обычно предпочтительнее, поскольку он более идиоматичен.