我有大小为6 GB的大型XML文件,但我只想从XML文件的几个部分获得一个小片段。我使用(XElement)XNode.ReadFrom()
方法并且工作得很好。但现在必要的片段也像任何东西一样生长并投掷内存不足异常。如何解决这个问题
using (XmlReader xr = XmlReader.Create(path))
{
xr.MoveToContent();
XNamespace un = xr.LookupNamespace("un");
while (xr.Read())
{
while (xr.NodeType == XmlNodeType.Element && xr.NamespaceURI == un && xr.LocalName == "M_ROOT")
{
XElement pin = (XElement)XNode.ReadFrom(xr);
}
}
}
答案 0 :(得分:1)
为什么你认为当你只需要一个大型XML文件(6 GB大小)的小片段时,它是否导致
Out of Memory Exception (OOM)
,因为你明白这一点:
让我解释几个重要方面:
4GB = 2^32 bytes
,这是由处理器设计的,但不是整个4 GB
可供用户进程使用,默认情况下在Windows上它是user process
为2 GB,Kernel process
为2 GB,这就是为什么大多数32位进程在接近2 GB时抛出OOM的原因。这不是完全RAM分配,而是虚拟内存,其中包括磁盘上的分页内存。64位的值是多少?
可以提取32位存储器以获得更高的存储空间
为什么你的进程在32位和64位编译?
如何分析
您当前的计划有什么问题?