【问题标题】: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 处理。前者通常是首选,因为它更惯用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2019-12-13
      • 2010-09-09
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多