我必须解析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)
所以请建议.谢谢你的帮助.
你是对的,XmlReader是正确的方法.并且不是XmlReader内存耗尽 - 这是你lstTest在哪里推动你找到的大多数节点.
正确的使用XmlReader方法是处理节点,然后忘记它们,继续前进.您可以将结果写入磁盘,或计算一些运行总计,或者其他任何东西 - 但不要保留您在内存中读取的所有内容 - 这样做的目的就是失败XmlReader.