我必须解析80 GB的XML才能从该文件中获取一些数据。我已经为此目的使用了XML阅读器。当我用304 MB文件检查代码时。然后在4秒钟内解析文件。所以我想我将为80 GB工作。但这让我在几分钟后记忆异常。

我有以下代码:

static void Main(string[] args)
    {

        List<Test> lstTest = new List<Test>();
        bool isTitle = false;
        bool isText = false;

        using (XmlReader Reader = XmlReader.Create(FilePath))
        {
            Test tt = new Test();
            while (Reader.Read())
            {                    switch (Reader.NodeType)
                {
                    case XmlNodeType.Element:
                        if (Reader.Name == "title")
                        {
                            isTitle = true;
                        }
                        if (Reader.Name == "text")
                        {
                            isText = true;
                        }
                        break;
                    case XmlNodeType.Text:
                        if (isTitle)
                        {
                            tt.Title = Reader.Value;
                            isTitle = false;
                        }

                        if (isText)
                        {
                            tt.Text = Reader.Value;
                            isText = false;
                        }
                        break;
                }

                if (tt.Text != null)
                {
                    lstTest.Add(tt);
                    tt = new Test();
                }
            }


        }
    }
}
}


因此,请提出建议。谢谢你的帮助。

最佳答案

没错,XmlReader是正确的选择。内存不足不是XmlReader的原因-推入找到的大多数节点的是lstTest

使用XmlReader的正确方法是处理节点,然后将其忽略,继续前进。您可以将结果写入磁盘,或计算一些运行总计,或其他任何操作-但不要将读取的所有内容都保留在内存中-这违反了XmlReader的宗旨。

关于c# - 在C#中解析80 Gb XML文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39153428/

10-14 11:52
查看更多