c# - 从 XmlReader.ReadInnerXml 保存 XmlDocument 时出现 OutOfMemoryException
问题描述
我正在使用 XmlReader.ReadInnerXml() 加载 XML 文件的一部分并将其保存为 XmlDocument。当 innerXml 部分超过 2 GB(估计值)时,我遇到了 OutOfMemoryException。处理此错误的最佳方法是什么?有没有更好的方法从 XmlReader 创建一个大的 xml?我可以在不加载到内存的情况下保存内容吗?
using (XmlReader xmlRdr = XmlReader.Create(file))
{
xmlRdr.MoveToContent();
while (xmlRdr.Read())
{
//when read to XmlNodeType.Element and xmlRdr.Name meets certain criteria
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
try
{
xmlDoc.LoadXml(xmlRdr.ReadInnerXml());
//get a few data from within the innerXml and eventually use XmlWritter to save the file
}
catch(Exception e)
{
string content = $"{e.GetType()} {e.Message} {NewLine} {objId}";
//send content to log file and email
}
}
}
解决方案
正如其中一条评论所说,也许可以尝试使用StreamReader和StreamWriter
本教程可能会有所帮助
推荐阅读
- c# - 如何在应用程序运行时显示 gif?
- variant - odoo 12下如何自定义创建产品的变量值?
- excel - icCube - 使用格式化值将报告导出到 Excel
- javascript - 在 ReactJS 中处理我的 API 响应时出现错误“JSON 输入意外结束”
- docker - Docker 和 VM 有什么不同?
- sql - 使用 ORDER BY SortKey 避免 UNION 查询中的重复行
- spring-boot - 无法从 Spring Boot 重定向到深层链接
- kotlin - Kotlin 公开了多对多 Jackson 无限递归 (StackOverflowError)
- tfs - TFS 2018 - 更改集合名称
- rest - 有没有办法使用烧瓶读取表单数据和上传的文件(多部分/表单数据)