我有一个网站,只要它到达我的代码中的以下位置就会抛出OutOfMemoryExceptions:
XmlSerializer xs = new XmlSerializer(t, xoverrides);
看到它只在Web服务器上发生时才会发生这种情况,我没有大量关于这种情况发生的信息。我知道它正在序列化的对象并不是太严肃 - 绝对不到每个MB。
你之前有这个吗?觉得帮我诊断一下这个问题?任何帮助表示赞赏。
谢谢!
答案 0 :(得分:9)
OutOfMemoryException不是由被序列化的对象引起的,而是由构造XmlSerializer对象引起的。创建XmlSerializer时,会动态生成程序集并将其加载到AppDomain中。在卸载AppDomain之前,这些程序集不能进行垃圾回收,在您的情况下永远不会。根据所使用的XmlSerializer构造函数,构造的每个XmlSerializer都将动态生成一个新的程序集。随着时间的推移,这些程序集将占用所有可用内存。
有几种解决方案:
Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET
答案 1 :(得分:0)
如果我回想起类似的问题,XmlSerializer比其处理的数据需要更多的内存。我不知道为什么会这样。