2010-05-10 83 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需要比它處理的數據更多的內存。我不確定爲什麼會出現這種情況。