2010-05-10 53 views
7

我有一个网站,被扔在一旦进入我的代码如下现货OutOfMemoryExceptions:.NET OutOfMemoryException异常的XMLSerializer.Serialize

XmlSerializer xs = new XmlSerializer(t, xoverrides); 

看到如何当它在Web服务器上这只是发生,我不知道为什么会发生这种情况。我知道它正在序列化的对象并不是太严重 - 每个对象肯定少于一个MB。

你有过这个吗?感觉像帮助我诊断问题?任何帮助表示赞赏。

谢谢!

回答

9

OutOfMemoryException不是由被序列化的对象引起的,而是由构造XmlSerializer对象造成的。当创建XmlSerializer时,会动态生成程序集并将其加载到AppDomain中。这些程序集不能被垃圾收集,直到他们的AppDomain被卸载,这在你的情况永远不会。根据所使用的XmlSerializer构造函数的不同,构建的每个XmlSerializer都会动态生成一个新的程序集。随着时间的推移,这些程序集将消耗所有可用内存

有几个解决方案:

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

Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET

+0

您好,我一直面临着类似的问题,而我使用 “新的XmlSerializer(o.GetType());”。我在我的本地机器上遇到了这个问题,这些机器上有非常大的数据被序列化,它没有给出在云服务器上托管的实时应用的任何例外。但是我无法在开发过程中进一步使用和测试序列化的字符串。我乐于接受建议。 – 2014-06-20 07:21:35

0

如果我回想起类似的问题,XmlSerializer需要比它处理的数据更多的内存。我不确定为什么会出现这种情况。

相关问题