我找不到这个问题的书面答案。如果我使用 SqlXml 对象将 xml 传递给 StoredProc,谁负责处理我正在创建的 XmlTextReader?
从我目前发现的情况来看,构造函数已经创建了我传入的 xml 的副本,所以我猜我可以在创建 SqlXml 对象后立即处理阅读器。但这只是一个猜测,因为我不知道 ado.net 以后是否会使用阅读器。
蒂亚·马丁
我找不到这个问题的书面答案。如果我使用 SqlXml 对象将 xml 传递给 StoredProc,谁负责处理我正在创建的 XmlTextReader?
从我目前发现的情况来看,构造函数已经创建了我传入的 xml 的副本,所以我猜我可以在创建 SqlXml 对象后立即处理阅读器。但这只是一个猜测,因为我不知道 ado.net 以后是否会使用阅读器。
蒂亚·马丁
你的假设是正确的。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 处理。前者通常是首选,因为它更惯用。