используя SQLXML в ADO.NET, кому нужно распоряжаться? - PullRequest
3 голосов
/ 03 января 2012

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

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

ТИА Martin

1 Ответ

2 голосов
/ 04 января 2012

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

...