【问题标题】:using SQLXML in ADO.NET, who needs to dispose?在 ADO.NET 中使用 SQLXML,谁需要处理?
【发布时间】:2012-01-03 16:24:57
【问题描述】:
我找不到这个问题的书面答案。
如果我使用 SqlXml 对象将 xml 传递给 StoredProc,谁负责处理我正在创建的 XmlTextReader?
从我目前发现的情况来看,构造函数已经创建了我传入的 xml 的副本,所以我猜我可以在创建 SqlXml 对象后立即处理阅读器。但这只是猜测,因为不知道ado.net以后会不会用到reader。
tia
马丁
【问题讨论】:
标签:
sql-server
xml
ado.net
sqlxml
【解决方案1】:
你的假设是正确的。 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 处理。前者通常是首选,因为它更惯用。