【问题标题】:XML Serialize OutOfMemoryExceptionXML 序列化 OutOfMemoryException
【发布时间】:2022-09-27 22:20:35
【问题描述】:

我有一个问题:我想序列化一个 xml ( 760mb ),但我得到一个内存不足的异常。

你对此有什么建议吗?

using (var stringWriter = new StringWriter())
                {
                    using (XmlWriter writer = XmlWriter.Create(stringWriter))
                    {
                        xmlSerializer.Serialize(writer, modelToSerialize);
                        Dts.Variables[\"User::Result\"].Value = stringWriter.ToString();
                    }
                }

有什么办法可以改变保存大小。

  • 那是一个 SSIS 脚本,而不仅仅是 C#。 XML 来自哪里,为什么要转换为字符串? SSIS 可以处理 XML 文件。一个文件的内容是不是变量是干什么用的
  • 我不想将它保存到文件中,因为这些信息会填满一个表格,然后我就不再需要它了。我从 API 获取信息
  • XML 是文本。没有必要使用 XmlWriter 将该文本复制到另一种 XML 格式中,这种格式充其量是相同的,然后是字符串。这意味着 SSIS 脚本无缘无故地浪费了 2.1GB RAM。将响应保存到文件,将其导入,然后删除该文件

标签: c#


【解决方案1】:

此问题是由于代码只是创建XmlWriter 对象,但无法正确关闭它。

一个解决方案是冲洗流。在执行操作结束时,添加以下行:

 writer.Flush();

参考:MS Docs

【讨论】:

  • 错误出现在这一行 xmlSerializer.Serialize(writer, modelToSerialize);
  • 错误是浪费 2.1GB RAM。 Serialize 只会浪费最后的 700MB。这无法通过更改 XmlWriter 设置来解决,API 响应和 XmlWriter 已经各自浪费了 700MB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多