XMLDocument dispose - 为什么它不支持IDisposable?

时间:2011-11-14 15:43:26

标签: .net xml idisposable using xmldocument

XMLDocument类似乎是支持IDisposable的理想候选者,因为......

  • 它可能包含大量数据。
  • 它的a表示可能复杂的数据模型。

这将允许您在Using {...}语句中使用它,并在使用后立即进行垃圾收集。

然而它似乎不支持它。

在这种情况下,处理它的最佳方式是什么?

或者它不需要支持IDisposable - 我想你完成后可以将它的引用设置为null?

或者它的关键区别在于它不会占用外部资源,例如数据库连接或外部文件,因此不需要IDispoable“支持”?

2 个答案:

答案 0 :(得分:5)

  

这将允许您在Using {...}语句中使用它,并在使用后立即进行垃圾收集。

不,使用后会立即处理,而不是垃圾收集。处置和垃圾收集不是一回事,尽管它们可能看起来很相似。 Dispose旨在释放非托管资源,例如数据库连接,文件句柄,非托管内存等。垃圾收集回收未使用的托管内存。

XmlDocument的情况下,当没有对它的引用时,它就有资格进行垃圾收集,并且在需要时将回收它使用的内存。因此,您只需释放对XmlDocument的所有引用,并等待GC完成其工作。请注意,您可以强制执行GC周期,但您可能不应该这样做:GC操作起来很昂贵,并且系统在适当的时候比您更了解。

答案 1 :(得分:3)

  

或者这里的关键区别在于它不会占用外部资源   例如数据库连接或外部文件,因此不需要   IDispoable“支持”?

是的,你在那里的头上钉了一针。它使用的唯一资源是内存(可能有很多对象来表示XML文档),而且我们有一个完美的工具来管理.net中的内存。即垃圾收集器。