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