首页 > 解决方案 > 从 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
    }
  }
}

标签: c#out-of-memoryxmldocumentxmlreader

解决方案


正如其中一条评论所说,也许可以尝试使用StreamReaderStreamWriter

教程可能会有所帮助


推荐阅读