C# 加载大型XML文件时如何解决System.OutOfMemoryException

C# 加载大型XML文件时如何解决System.OutOfMemoryException,c#,.net,xml,winforms,C#,.net,Xml,Winforms,我的程序中有这段代码,它实际加载了500 MB及以上的文件 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(reader); reader.Close(); 我遇到这种错误,不知道如何解决问题。请给我一些建议。除了.NET之外,您还需要类似SAX的东西 或者XmlReader,基本上是一个基于流的解析器 HTH我会使用XmlReader来解析文档,提供对数据的只向前访问,并在内存中很好地清理自己——当然,如果没有XmlDocument类的

我的程序中有这段代码,它实际加载了500 MB及以上的文件

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
reader.Close();

我遇到这种错误,不知道如何解决问题。请给我一些建议。

除了.NET之外,您还需要类似SAX的东西

或者XmlReader,基本上是一个基于流的解析器


HTH

我会使用
XmlReader
来解析文档,提供对数据的只向前访问,并在内存中很好地清理自己——当然,如果没有
XmlDocument
类的便利,它可能会复杂得多

这个简单的示例首先开始逐行读取文件,为每行提供一个XmlReader

using (var rdr = XmlReader.Create(new StreamReader("File.xml")))
{
    while (rdr.Read())
    {
        //do what you will with the line
    }
}

查看使用位于

的XmlReader时可用的方法和属性。您可能需要切换到基于流的XML解析器。和/或切换到实际加载较小的XML文件。@Matt您可以向我展示一些如何执行此操作的代码吗?除上述代码外,我还有以下代码:XmlTextReader myTextReader=new XmlTextReader(txtFileName.Text);myTextReader.WhitespaceHandling=WhitespaceHandling.None;而(myTextReader.Read()){foreach(xmlDoc中的XmlNode节点){TreeNode TreeNode=XmlNode2TreeNode(myTextReader,myTextReader.p);TreeNode.Text=FormatName(node);treeView1.Nodes.Add(TreeNode);}}添加了基本的示例来回答,mingzcky。