XMLSerializer.Serialize 上的 .NET OutOfMemoryException

2024-04-17

我有一个网站,每当它到达我的代码中的以下位置时,就会抛出 OutOfMemoryException:

XmlSerializer xs = new XmlSerializer(t, xoverrides);

看到只有在网络服务器上时才会发生这种情况,我没有大量关于为什么会发生这种情况的信息。我知道它正在序列化的对象并不是太严重——每个对象绝对小于 1 MB。

你以前有过这个吗?想帮我诊断问题吗?任何帮助表示赞赏。

Thanks!


OutOfMemoryException 不是由序列化对象引起的,而是 XmlSerializer 对象构造的结果。创建 XmlSerializer 时,会动态生成一个程序集并将其加载到 AppDomain 中。在卸载这些程序集的 AppDomain 之前,无法对其进行垃圾收集,而在您的情况下则永远不会。根据所使用的 XmlSerializer 构造函数,构造的每个 XmlSerializer 都将动态生成新的程序集。随着时间的推移,这些程序集将消耗所有可用内存。

有几种解决方案:

  1. 缓存您创建的 XmlSerializer。
  2. 使用实现缓存的 XmlSerializer 构造函数重载之一。看来您正在使用 XmlSerializer(Type, XmlAttributeOverrides) ,它不实现缓存。 XmlSerializer(Type) 和 XmlSerializer(Type, string) 实现缓存。

Microsoft KB:在 ASP.NET 中创建多个 XmlSerializer 对象时,内存使用率很高 http://support.microsoft.com/kb/886385/en-us

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XMLSerializer.Serialize 上的 .NET OutOfMemoryException 的相关文章

随机推荐