A utilização da memória é elevada ao criar vários objectos de XmlSerializer no ASP.NET


Sintomas


No Microsoft ASP.NET, a utilização da memória aumenta inesperadamente quando cria vários objectos de XmlSerializer .

Causa


Este problema ocorre porque uma assemblagem que contém a linguagem intermediária da Microsoft (MSIL) é criada e carregada na memória quando cria um objecto de XmlSerializer . Não é possível descarregar a assemblagem sem descarregar o domínio de aplicação onde reside. Por conseguinte, quando cria vários objectos de XmlSerializer , poderá notar inesperadamente elevada utilização da memória.

Por exemplo, se utilizar o construtor seguinte para criar vários objectos de XmlSerializer , uma nova assemblagem dinâmica é criada sempre que:
public void XmlSerializer( Type t, Type[] extraTypes)

Resolução


Para contornar este problema de voltar a criar assemblagens dinâmicas, utilize um dos seguintes métodos:
  • Criar uma instância da classe XmlSerializer e colocar essa instância na cache utilizando as APIs da colocação em cache. Por exemplo, para um ficheiro. dll que é o nome HighSchool, o seguinte código coloca em cache uma instância da classe XmlSerializer :
    XmlSerializer mySerializer = new XmlSerializer(typeof(HighSchool.MyClass), attrOverrides, extraTypes, root, "http://www.microsoft.com");
    Cache["HighSchoolSerializer"] = mySerializer
    Use a instância da classe XmlSerializer que coloca na cache em vez de criar um novo objecto de XmlSerializer sempre.
  • Utilize os construtores de classe de XmlSerializer seguintes. As assemblagens em cache estas construtores de classe:
    No .NET Framework versão 1.0
     public XmlSerializer(Type);

    No .NET Framework versão 1.1
    public XmlSerializer(Type type);
    public XmlSerializer(Type type, string defaultNamespace); 
  • Declare o objecto de XmlSerializer para ser um membro estático de uma classe.

Referências


Para obter informações adicionais sobre a classe de XmlSerializer e os construtores de classe de XmlSerializer , visite os seguintes Web sites da Microsoft Developer Network (MSDN):