2010-05-10 10 views
7

Ich habe eine Website, die OutOfMemoryExceptions auf, wann immer es wird auf die folgende Stelle in meinem Code wirft:.NET OutOfMemoryException auf XMLSerializer.Serialize

XmlSerializer xs = new XmlSerializer(t, xoverrides); 

Zu sehen, wie dies geschieht nur dann, wenn es auf dem Web-Server Ich habe nicht viele Informationen darüber, warum dies geschieht. Ich weiß, dass die Objekte, die serialisiert werden, nicht zu ernst sind - definitiv weniger als ein MB pro Stück.

Hatten Sie das schon einmal? Helfen Sie mir dabei, das Problem zu diagnostizieren? Jede Hilfe wird geschätzt.

Danke!

Antwort

9

Die OutOfMemoryException wird nicht durch die serialisierten Objekte verursacht, sondern ist ein Ergebnis der Konstruktion der XmlSerializer-Objekte. Wenn ein XmlSerializer erstellt wird, wird eine Assembly dynamisch generiert und in die AppDomain geladen. Diese Assemblys können erst nach dem Entladen der AppDomain mit dem Garbage Collection-Befehl geladen werden, was in Ihrem Fall niemals der Fall ist. Je nachdem, welcher XmlSerializer-Konstruktor verwendet wird, generiert jeder erstellte XmlSerializer dynamisch eine neue Assembly. Im Laufe der Zeit verbrauchen diese Assemblies den gesamten verfügbaren Speicher.

Es gibt ein paar Lösungen:

  1. Cache XmlSerializer, die Sie erstellen.
  2. Verwenden Sie eine der XmlSerializer-Konstruktorüberladungen, die das Caching implementieren. Anscheinend verwenden Sie XmlSerializer (Type, XmlAttributeOverrides), das kein Caching implementiert. XmlSerializer (Typ) und XmlSerializer (Typ, Zeichenfolge) implementieren Caching.

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

+0

Hallo, ich habe ähnliches Problem wurde gegenüber, während ich "new XmlSerializer (o.GetType());" verwenden. Ich stehe auf meinem lokalen Rechner vor dem Problem, dass sehr große Daten serialisiert werden. Ausgenommen davon ist die Live-App, die auf einem Cloud-Server gehostet wird. Aber ich kann die serialisierte Zeichenfolge während der Entwicklung nicht weiter verwenden und testen. Ich bin offen für Vorschläge. –

0

Wenn ich mich von ähnlichen Problemen vor einiger Zeit erinnere, benötigt der XmlSerializer eine Menge mehr Speicher als die Daten, die verarbeitet werden. Ich bin mir nicht sicher, warum dies der Fall ist.

Verwandte Themen