Speicherverwendung ist hoch, wenn mehrere XmlSerializer-Objekte in ASP.NET erstellen


Problembeschreibung


In Microsoft ASP.NET erhöht sich der Speicherverbrauch unerwartet, wenn Sie mehrere XmlSerializer -Objekte erstellen.

Ursache


Dieses Problem tritt auf, weil eine Assembly mit Microsoft intermediate Language (MSIL) erstellt und in den Speicher geladen, wenn ein XmlSerializer -Objekt erstellen. Die Assembly kann nicht entfernt werden, ohne Entladen der Anwendungsdomäne in befindet. Beim Erstellen mehrerer XmlSerializer Objekte möglicherweise unerwartet hohen Speicherbedarf feststellen werden.

Verwenden Sie den folgenden Konstruktor mehrere XmlSerializer -Objekte erstellen, wird eine neue dynamische Assembly z. B. jedes Mal erstellt:
public void XmlSerializer( Type t, Type[] extraTypes)

Problemlösung


Zur Umgehung dieses Problems neu erstellen dynamische Assemblys verwenden Sie eine der folgenden Methoden:
  • Erstellt eine Instanz der XmlSerializer -Klasse und Instanz mit den caching-APIs im Cache ablegen. Für eine DLL-Datei HighSchool Namens, speichert der folgende Code z. B. eine Instanz der XmlSerializer -Klasse:
    XmlSerializer mySerializer = new XmlSerializer(typeof(HighSchool.MyClass), attrOverrides, extraTypes, root, "http://www.microsoft.com");
    Cache["HighSchoolSerializer"] = mySerializer
    Verwenden Sie die Instanz der XmlSerializer -Klasse, die im Cache anstatt ein neues XmlSerializer -Objekt bei jedem ablegen.
  • Verwenden Sie die folgenden Konstruktoren der XmlSerializer -Klasse. Diese Klassenkonstruktoren cache Assemblys:
    In.NET Framework, Version 1.0
     public XmlSerializer(Type);

    In.NET Framework, Version 1.1
    public XmlSerializer(Type type);
    public XmlSerializer(Type type, string defaultNamespace); 
  • Deklarieren Sie das XmlSerializer Objekt ein statischer Member einer Klasse.

Referenzen


Weitere Informationen über die XmlSerializer -Klasse und die XmlSerializer -Klassenkonstruktoren finden Sie auf folgenden Websites von Microsoft Developer Network (MSDN):