我必须解析 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/