在c#中解析80 Gb XML文件

use*_*651 1 c#

我必须解析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();
                }
            }


        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

所以请建议.谢谢你的帮助.

Vil*_*lx- 6

你是对的,XmlReader是正确的方法.并且不是XmlReader内存耗尽 - 这是你lstTest在哪里推动你找到的大多数节点.

正确的使用XmlReader方法是处理节点,然后忘记它们,继续前进.您可以将结果写入磁盘,或计算一些运行总计,或者其他任何东西 - 但不要保留您在内存中读取的所有内容 - 这样做的目的就是失败XmlReader.