XMLSerializer.Serialize上的.NET OutOfMemoryException

Mic*_*cah 7 asp.net out-of-memory xmlserializer

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

XmlSerializer xs = new XmlSerializer(t, xoverrides);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

小智 11

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

有几个解决方案:

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

Microsoft KB:在ASP.NET中创建多个XmlSerializer对象时,内存使用率很高