2009-07-17 55 views
1

这可能是沿着.NET Collections and the Large Object Heap (LOH)大对象堆

.NET中的线,我加载一个字符串,使得〜200KB的文本文档时,XML转换为base64一个XmlDocument。问题是,字符串应该分配给大对象堆。从这里的阅读比较中我知道XmlReader是读取字符串的最有效的方法,但XmlDocument可能会给我更直接的阅读和更多的功能(xpath)。

我的XML的每个节点都应该是一个相当小的字符串,没有前往附近的大型对象堆。使用Lutz .Net Reflector它看起来XmlDocument在内部使用链接节点。

所以最后,我的问题:请问加载此字符串保存〜200 KB(> 85000个字节)使用XmlDocument的时候引起的又一目的为蕙。我们有点担心分割堆并导致OOM错误。或者XmlDocument恰好发生(至少对于我询问的数据的情况)会在托管堆上创建大量对象?

回答

1

你为什么加载XML转换成字符串开始吗?数据来自哪里?你不能传递(如StreamTextReader)直接进入XmlDocument开始吗?

+0

该字符串来自数据库。我们正在Microsoft Dynamics平台之上构建一个垂直市场应用程序,因此使用其他类型的数据库字段对我来说不是一种选择。 – 2009-07-17 20:29:55

3

它是大于85 KB的是,在大型物体结束堆连续数据的唯一对象。例如大型字符串和数万个元素的数组。

一个XmlDocument由很多小物件,所以对大对象堆就会很少分配任何东西。唯一的机会是如果一个节点包含数十个孩子,或者如果一个值超过42500个字符。