【问题标题】:How to avoid memory exception when reading, creating and sending a very large xml file?读取、创建和发送非常大的 xml 文件时如何避免内存异常?
【发布时间】:2015-10-15 05:59:13
【问题描述】:

我正在努力优化我们的代码,以便我们可以读取、创建发送可能非常大(2GB的xml文件强>)。

对于读取和创建,我们使用XmlReader 类。

我们实际上是从其他一些服务中得到一个 XML 字符串。如果我们将 XML 字符串存储在一个字符串变量中,它会占用相同数量的内存。抛开这一点不谈,请提出处理 XML 字符串的最佳方法,以免发生内存溢出异常。

我无法在此处显示代码由于公司政策,但这无关紧要,因为代码已经在工作,但如果是大型 xml 字符串,它会给出:

内存异常

...如前所述。

解释:

我们从服务中获得 2GB Xml。

我们使用流式处理它。

由于我们需要使用 xmlreader 读取该 xml,我们以字符串的形式传递 xml 以创建一个大小几乎相同(2GB)的新 xml

byte[] msg = Buffer.ExtractMessage(messageStart, messageEnd);  
string msg1 = Encoding.UTF8.GetString(msg);

CreateNewXMLFileFromTheCurrentXmlString(msg1);

然后我们将新的 xml 发送到其他服务。

【问题讨论】:

标签: c# xml


【解决方案1】:

如果可能的话,最好的方法是使用规范化和索引良好的数据库。 然后使用 LINQ 获取数据应该可以解决您的问题。 问题是来源而不是你的逻辑,因为 XML 文件不应该像你的那么大。

看这里: LINQ TO XML

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2015-12-31
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多