Uso de memoria es alto cuando se crean varios objetos de XmlSerializer en ASP.NET


Síntomas


En Microsoft ASP.NET, el uso de memoria aumenta inesperadamente cuando se crean varios objetos de XmlSerializer .

Causa


Este problema se produce porque se crea un ensamblado que contiene el lenguaje intermedio de Microsoft (MSIL) y se carga en memoria cuando se crea un objeto XmlSerializer . No se puede descargar el ensamblado sin descargar el dominio de aplicación que reside en. Por lo tanto, cuando se crean varios objetos de XmlSerializer , puede observar el uso de memoria inesperadamente alta.

Por ejemplo, si utiliza el siguiente constructor a crear varios objetos de XmlSerializer , un nuevo ensamblado dinámico se crea cada vez:
public void XmlSerializer( Type t, Type[] extraTypes)

Solución


Para evitar este problema de volver a crear ensamblados dinámicos, utilice uno de los métodos siguientes:
  • Cree una instancia de la clase XmlSerializer y poner esa instancia en la caché mediante las API de almacenamiento en caché. Por ejemplo, para un archivo DLL denominado HighSchool, el código siguiente almacena en caché una instancia de la clase XmlSerializer :
    XmlSerializer mySerializer = new XmlSerializer(typeof(HighSchool.MyClass), attrOverrides, extraTypes, root, "http://www.microsoft.com");
    Cache["HighSchoolSerializer"] = mySerializer
    Utilice la instancia de la clase XmlSerializer que se coloca en la caché en lugar de crear un nuevo objeto XmlSerializer cada vez.
  • Utilice los siguientes constructores de la clase XmlSerializer . Estos constructores de clase de los ensamblados de la caché:
    En la versión 1.0 de.NET Framework
     public XmlSerializer(Type);

    En la versión 1.1 de.NET Framework
    public XmlSerializer(Type type);
    public XmlSerializer(Type type, string defaultNamespace); 
  • Declare el objeto XmlSerializer para ser un miembro estático de una clase.

Referencias


Para obtener información adicional acerca de la clase XmlSerializer y los constructores de la clase XmlSerializer , visite los siguientes sitios Web de Microsoft Developer Network (MSDN):