Artigo: 886385 - Última revisão: sexta-feira, 24 de Fevereiro de 2012 - Revisão: 0.1

Uso de memória é alto quando você cria vários objetos de XmlSerializer no ASP.NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

No Microsoft ASP.NET, o uso da memória aumenta inesperadamente quando você criar vários XmlSerializer objetos.

Causa

Esse problema ocorre porque um assembly que contém o Microsoft intermediate language (MSIL) é criado e carregado na memória quando você criar um XmlSerializer objeto. Você não pode descarregar o assembly sem descarregar o domínio do aplicativo que ele reside no. Portanto, quando você criar vários XmlSerializer objetos, você pode observar o uso de memória alta inesperadamente.

Por exemplo, se você usar o seguinte construtor para criar vários XmlSerializerobjetos, um novo assembly dinâmico é criado sempre que:
public void XmlSerializer( Type t, Type[] extraTypes)

Resolução

Para contornar esse problema de recriar assemblies dinâmicos, use um dos seguintes métodos:
  • Criar uma instância de XmlSerializer classe e colocar no cache da instância usando as APIs de cache. Por exemplo, um arquivo. dll chamado HighSchool, o código a seguir armazena uma instância de XmlSerializer classe:
    XmlSerializer mySerializer = new XmlSerializer(typeof(HighSchool.MyClass), attrOverrides, extraTypes, root, "http://www.microsoft.com");
    Cache["HighSchoolSerializer"] = mySerializer 
    
    Use a instância do XmlSerializer classe colocar em cache em vez de criar um novo XmlSerializer objeto de cada vez.
  • Use o seguinte XmlSerializer construtores de classe. Esses construtores de classe em cache os assemblies:
    Na.NET Framework versão 1.0
     public XmlSerializer(Type);

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

Referências

Para obter informações adicionais sobre o XmlSerializer classe e sobre o XmlSerializer construtores de classe, visite os seguintes sites da Microsoft Developer Network (MSDN):
. aspx http://msdn2.microsoft.com/en-us/library/System.XML.Serialization.XmlSerializer (vs.71) (http://msdn2.microsoft.com/en-us/library/system.xml.serialization.xmlserializer(vs.71).aspx)
. aspx http://msdn2.microsoft.com/en-us/library/System.XML.Serialization.xmlserializer_members (vs.71) (http://msdn2.microsoft.com/en-us/library/system.xml.serialization.xmlserializer_members(vs.71).aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbtshoot kbprb kbmt KB886385 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 886385  (http://support.microsoft.com/kb/886385/en-us/ )