我有一个网站,只要它到达我的代码中的以下位置,就会抛出 OutOfMemoryExceptions:
XmlSerializer xs = new XmlSerializer(t, xoverrides);
看到只有在 Web 服务器上才会发生这种情况,我没有太多关于为什么会发生这种情况的信息。我知道它正在序列化的对象并不太严重——每个对象肯定小于一个 MB。
你以前有过这个吗?想帮我诊断问题吗?任何帮助表示赞赏。
谢谢!
我有一个网站,只要它到达我的代码中的以下位置,就会抛出 OutOfMemoryExceptions:
XmlSerializer xs = new XmlSerializer(t, xoverrides);
看到只有在 Web 服务器上才会发生这种情况,我没有太多关于为什么会发生这种情况的信息。我知道它正在序列化的对象并不太严重——每个对象肯定小于一个 MB。
你以前有过这个吗?想帮我诊断问题吗?任何帮助表示赞赏。
谢谢!
OutOfMemoryException 不是由正在序列化的对象引起的,而是由 XmlSerializer 对象的构造引起的。创建 XmlSerializer 时,会动态生成程序集并将其加载到 AppDomain 中。在卸载它们的 AppDomain 之前,这些程序集不能被垃圾收集,在您的情况下永远不会。根据所使用的 XmlSerializer 构造函数,构造的每个 XmlSerializer 都将动态生成一个新程序集。随着时间的推移,这些程序集将消耗所有可用内存。
有几个解决方案:
如果我回想起不久前的类似问题,XmlSerializer 需要大量内存而不是其处理的数据。我不确定为什么会这样。