2010-05-10 10 views
7

Tengo un sitio web que está lanzando en OutOfMemoryExceptions cada vez que se llega al siguiente punto en mi código:.NET OutOfMemoryException en XMLSerializer.Serialize

XmlSerializer xs = new XmlSerializer(t, xoverrides); 

Al ver cómo esto sólo ocurre cuando se está en el servidor Web , no tengo mucha información sobre por qué está sucediendo esto. Sé que los objetos que está serializando no son demasiado serios, definitivamente menos de un MB cada uno.

¿Ha tenido esto antes? ¿Tienes ganas de ayudarme a diagnosticar el problema? Cualquier ayuda es apreciada.

Gracias!

Respuesta

9

OutOfMemoryException no es causada por los objetos que se serializan, sino que es el resultado de la construcción de los objetos XmlSerializer. Cuando se crea un XmlSerializer, un ensamblaje se genera dinámicamente y se carga en el AppDomain. Estos ensamblajes no se pueden recolectar como basura hasta que su AppDomain esté descargado, lo que en su caso nunca ocurrirá. Según el constructor de XmlSerializer que se utilice, todos y cada uno de los XmlSerializer construidos generarán dinámicamente un nuevo ensamblaje. Con el tiempo, estos ensamblajes consumirán toda la memoria disponible.

Hay un par de soluciones:

  1. caché XmlSerializer que se crea.
  2. Utilice una de las sobrecargas del constructor XmlSerializer que implementa el almacenamiento en caché. Parece que está utilizando XmlSerializer (Type, XmlAttributeOverrides) que no implementa el almacenamiento en caché. XmlSerializer (Type) y XmlSerializer (Type, string) implementan el almacenamiento en caché.

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

+0

Hola, he tenido que hacer frente problema similar, mientras que yo estoy usando "nueva XmlSerializer (o.GetType());". Me enfrento a este problema en mi máquina local con datos muy grandes que se serializan. No está dando ninguna excepción en la aplicación en vivo, que se aloja en un servidor en la nube. Pero no puedo usar y probar la cadena serializada aún más durante el desarrollo. Estoy abierto a sugerencias. –

0

Si recuerdo problemas similares hace un tiempo, el XmlSerializer necesita una tonelada de memoria más que los datos de su procesamiento. Aunque no estoy seguro de por qué este es el caso.

Cuestiones relacionadas