XMLSerializer.Serialize上的.NET OutOfMemoryException

时间:2010-05-10 19:19:50

标签: asp.net out-of-memory xmlserializer

我有一个网站,只要它到达我的代码中的以下位置就会抛出OutOfMemoryExceptions:

XmlSerializer xs = new XmlSerializer(t, xoverrides);

看到它只在Web服务器上发生时才会发生这种情况,我没有大量关于这种情况发生的信息。我知道它正在序列化的对象并不是太严肃 - 绝对不到每个MB。

你之前有这个吗?觉得帮我诊断一下这个问题?任何帮助表示赞赏。

谢谢!

2 个答案:

答案 0 :(得分:9)

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

有几种解决方案:

  1. 缓存您创建的XmlSerializer。
  2. 使用实现缓存的XmlSerializer构造函数重载之一。您似乎正在使用不实现缓存的XmlSerializer(Type,XmlAttributeOverrides)。 XmlSerializer(Type)和XmlSerializer(Type,string)实现缓存。
  3. Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET

答案 1 :(得分:0)

如果我回想起类似的问题,XmlSerializer比其处理的数据需要更多的内存。我不知道为什么会这样。