Asp.net 包含Xml文档的大型对象堆

Asp.net 包含Xml文档的大型对象堆,asp.net,memory-management,xmldocument,Asp.net,Memory Management,Xmldocument,这可能与 在.Net中,我正在加载一个带有字符串的XmlDocument,当xml转换为base64时,该字符串将生成约200KB的文本文档。关键是,字符串应该分配给大对象堆。通过阅读这里的比较,我知道XmlReader是读取字符串的最有效的方法,但是XmlDocument可能给我提供了更直接的读取,具有更多的功能(xpath) 我的XML的每个节点都应该是一个相当小的字符串,与大对象堆的标题无关。使用Lutz.Net Reflector,XmlDocument似乎在内部使用链接节点 最后,我的

这可能与

在.Net中,我正在加载一个带有字符串的XmlDocument,当xml转换为base64时,该字符串将生成约200KB的文本文档。关键是,字符串应该分配给大对象堆。通过阅读这里的比较,我知道XmlReader是读取字符串的最有效的方法,但是XmlDocument可能给我提供了更直接的读取,具有更多的功能(xpath)

我的XML的每个节点都应该是一个相当小的字符串,与大对象堆的标题无关。使用Lutz.Net Reflector,XmlDocument似乎在内部使用链接节点


最后,我的问题是:当使用XmlDocument时,加载这个节省约200 KB(>85000字节)的字符串是否会导致LOH的另一个对象。我们有点担心堆的碎片会导致OOM错误。或者XmlDocument恰好(至少对于我所询问的数据而言)为托管堆创建了许多对象吗?

为什么要首先将XML加载到字符串中?数据来自哪里?您不能将其(例如
文本阅读器
)直接传递到
XmlDocument
中以开始吗?

为什么要将XML加载到字符串中以开始?数据来自哪里?你不能先将它(例如
文本阅读器
)直接传递到
XmlDocument
中吗?

这是唯一一个大于85 kB的连续数据对象,最终进入大对象堆。例如,包含上万个元素的大型字符串和数组


XmlDocument由许多小对象组成,因此它很少在大对象堆上分配任何内容。唯一的可能性是,如果一个节点包含数万个子节点,或者一个值超过42500个字符。

这是唯一一个在大对象堆中结束的大于85 kB的连续数据对象。例如,包含上万个元素的大型字符串和数组


XmlDocument由许多小对象组成,因此它很少在大对象堆上分配任何内容。唯一可能的情况是,一个节点包含数万个子节点,或者某个值超过42500个字符。

字符串来自数据库。我们正在Microsoft Dynamics平台上构建一个垂直市场应用程序,因此使用其他类型的数据库字段对我来说不是一个选项。更清楚的是,字符串来自Dynamics web服务,该服务将其从数据库中提取。如果它来自web服务,您是否在HTTP请求中获取它?如果你能控制它,你也许能够流式传输结果——如果不能,你基本上承诺在内存中保留200K字符串。我正在获取一个HTTP请求。流出来的结果不是我所熟悉的,但我必须考虑。我知道我可能会把那个字符串保存在内存中。我更担心的是,我没有通过使用XmlDocument类来增加它。谢谢您的回复。XmlDocument肯定会添加到其中,但我非常怀疑您是否会在LOH中找到其他内容。字符串来自数据库。我们正在Microsoft Dynamics平台上构建一个垂直市场应用程序,因此使用其他类型的数据库字段对我来说不是一个选项。更清楚的是,字符串来自Dynamics web服务,该服务将其从数据库中提取。如果它来自web服务,您是否在HTTP请求中获取它?如果你能控制它,你也许能够流式传输结果——如果不能,你基本上承诺在内存中保留200K字符串。我正在获取一个HTTP请求。流出来的结果不是我所熟悉的,但我必须考虑。我知道我可能会把那个字符串保存在内存中。我更担心的是,我没有通过使用XmlDocument类来增加它。谢谢您的回复。XmlDocument肯定会增加它,但我非常怀疑您最终会在LOH中得到其他任何东西。