如何在读取、创建和发送非常大的xml文件时避免内存异常
本文关键字:文件 xml 异常 内存 非常 读取 创建 | 更新日期: 2023-09-27 18:17:57
我正在努力优化我们的代码,以便我们可以读取,创建和发送 xml文件,这可以是非常大的大小(2GB)。
对于读和创建,我们使用XmlReader
类。
我们实际上从其他服务获得一个XML字符串。如果我们将XML字符串存储在字符串变量中,它将占用相同数量的内存。撇开这一点不谈,请建议处理XML字符串的最佳方法,以使内存超出界限的异常不会发生。
我不能在这里显示代码 由于公司政策但这应该无关紧要,因为代码已经工作了,但在大xml字符串的情况下,它给出:
内存异常
…如前所述.
解释:
我们从一个服务中得到2GB Xml。
我们使用流处理它。
因为我们需要使用xmlreader读取xml,所以我们以字符串的形式传递xml以创建一个大小几乎相同的新xml (2GB)
byte[] msg = Buffer.ExtractMessage(messageStart, messageEnd);
string msg1 = Encoding.UTF8.GetString(msg);
CreateNewXMLFileFromTheCurrentXmlString(msg1);
如果可能的话,最好的方法是使用规范化和索引良好的数据库。然后使用LINQ获取数据应该可以解决您的问题。问题是源而不是你的逻辑,因为XML文件不应该像你的那么大。
看这里:LINQ TO XML