我有一个网站,每当它到达我的代码中的以下位置时,就会抛出 OutOfMemoryException:
XmlSerializer xs = new XmlSerializer(t, xoverrides);
看到只有在网络服务器上时才会发生这种情况,我没有大量关于为什么会发生这种情况的信息。我知道它正在序列化的对象并不是太严重——每个对象绝对小于 1 MB。
你以前有过这个吗?想帮我诊断问题吗?任何帮助表示赞赏。
Thanks!
OutOfMemoryException 不是由序列化对象引起的,而是 XmlSerializer 对象构造的结果。创建 XmlSerializer 时,会动态生成一个程序集并将其加载到 AppDomain 中。在卸载这些程序集的 AppDomain 之前,无法对其进行垃圾收集,而在您的情况下则永远不会。根据所使用的 XmlSerializer 构造函数,构造的每个 XmlSerializer 都将动态生成新的程序集。随着时间的推移,这些程序集将消耗所有可用内存。
有几种解决方案:
- 缓存您创建的 XmlSerializer。
- 使用实现缓存的 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(使用前将#替换为@)