在 C# 中解析大型 XML(大小为 1GB)的最佳方法是啥?

Posted

技术标签:

【中文标题】在 C# 中解析大型 XML(大小为 1GB)的最佳方法是啥?【英文标题】:What is the best way to parse large XML (size of 1GB) in C#?在 C# 中解析大型 XML(大小为 1GB)的最佳方法是什么? 【发布时间】:2010-10-02 21:47:23 【问题描述】:

我有一个 1GB 的 XML 文件并且想要解析它。如果我使用 XML Textreader 或 XMLDocument,结果会很慢,有时会挂起...

【问题讨论】:

那个无耻插入的网址有什么用? 什么都没有,尤其是现在它已经消失了。 【参考方案1】:

您必须使用 xmlreader 实现自定义逻辑。 xmlreader 在使用之前不会将完整的 XML 加载到内存中,这意味着您可以从流中读取它并按原样处理它。

【讨论】:

【参考方案2】:

XmlDocument 在这种情况下是不可行的,因为它会尝试将该千兆字节吸入主内存。我很惊讶您发现 XmlTextReader 太慢了。您是否尝试过类似以下的方法?

using (XmlTextReader rdr = new XmlTextReader("MyBigFile.txt"))

     // use rdr to advance through the document.

【讨论】:

【参考方案3】:

XMLTextreader 不应该挂起,因为它是基于流的并且只能处理数据块。

如果它挂起,很可能是你在加载文件时做错了。

【讨论】:

它可能由于操作系统或文件系统级别的资源限制而挂起。【参考方案4】:

我对这个主题不是很熟悉,但是 XmlReader 类应该可以很好地解决您的具体问题。毕竟,它们正是为此进行了优化。

【讨论】:

【参考方案5】:

我只想通过我发现的性能比较来支持所有推广 XmlReader 的人:

http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html

【讨论】:

以上是关于在 C# 中解析大型 XML(大小为 1GB)的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 JAVA 中解析大型 XML 文档

解析大型 XML 文件?

在 C# 中将大型双数组保存为文件的最有效方法

C# XML 解析问题

c#中不区分大小写的XML解析器

在 C# Compact Framework 中加速 XML 的解析(使用 XmlTextReader 和 XElement)?