Compartilhar via


Visão geral do estado do aplicativo ASP.NET

O estado do aplicativo é um repositório de dados disponível para todas as classes em um aplicativo ASP.NET.O estado do aplicativo é armazenado na memória no servidor e é mais rápido que armazenar e recuperar informações em um banco de dados.Ao contrário do estado de sessão, que é específico a uma sessão de usuário único, o estado do aplicativo se aplica a todos os usuários e sessões.Portanto, o estado do aplicativo é um local útil para armazenar pequenas quantidades de dados muito usados que não serão alteradas de um usuário para outro.Para obter informações sobre como salvar dados em uma base por usuário consulte Visão geral sobre Estado de sessão ASP.NET e Visão geral sobre propriedades de perfil do ASP.NET.

Usando Estado do Aplicativo

O estado do aplicativo é armazenado em uma instância da classe HttpApplicationState.Esta classe expõe um dicionário chave-valor de objetos.

A instância HttpApplicationState é criada na primeira vez que um usuário acessa qualquer recurso URL em um aplicativo.A classe HttpApplicationState geralmente é acessada através da propriedade Application da classe HttpContext.

Você pode usar o estado do aplicativo de duas maneiras.Você pode adicionar, acessar ou remover os valores da coleção Contents diretamente através de código.A classe HttpApplicationState pode ser acessada em qualquer momento durante a vida de um aplicativo.No entanto, geralmente é útil carregar dados do estado do aplicativo quando o aplicativo for iniciado.Para fazer isso, você pode colocar o código para carregar o estado do aplicativo no método Application_Start no arquivo Global.asax.Para obter mais informações, consulte: Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0.

Como alternativa, você pode adicionar objetos à coleção StaticObjects via uma declaração <object > no arquivo Global.asax do seu aplicativo Web.O estado do aplicativo definido desta forma pode, então, ser acessado a partir de código em qualquer lugar no seu aplicativo.O exemplo a seguir mostra uma declaração de objeto para um valor de estado do aplicativo:

<object  scope="application" ID="MyInfo" 
    PROGID="MSWC.MYINFO">
</object>

Você pode adicionar objetos à coleção StaticObjects apenas no arquivo Global.asax.A coleção gera um NotSupportedException se você tentar adicionar objetos diretamente através de código.

Você pode acessar membros de objetos armazenados no estado do aplicativo sem precisar fazer referência à coleção Application.O exemplo de código a seguir mostra como fazer referência a um membro de um objeto definido na coleção StaticObjects do estado do aplicativo:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label1.Text = MyInfo.Title
End Sub
protected void Page_Load(Object sender, EventArgs e)
    Label1.Text = MyInfo.Title;
End Sub

Considerações sobre o Estado do Aplicativo

Ao usar o estado do aplicativo, você deve estar ciente das considerações importantes a seguir:

  • Recursos Porque ele é armazenado na memória, o estado do aplicativo é muito rápido comparado ao salvar dados em disco ou um banco de dados.No entanto, armazenando blocos grandes de dados no estado do aplicativo pode preencher mais memória do servidor, fazendo com que o servidor pagine memória para o disco.Como alternativa para usar o estado do aplicativo, você pode usar o mecanismo de cache do ASP.NET para armazenar grandes quantidades de dados do aplicativo.O cache ASP.NET também armazena dados na memória e, portanto, é muito rápido; no entanto, o ASP.NET ativamente gerencia o cache e removerá itens quando a memória ficar escassa.Para obter mais informações, consulte: Visão geral do cache no ASP.NET.

  • Volatilidade Como o estado do aplicativo é armazenado na memória do servidor, ele é perdido sempre que o aplicativo for interrompido ou reiniciado.Por exemplo, se o arquivo Web.config é alterado, o aplicativo é reiniciado e todo o estado do aplicativo é perdido a menos que valores de estado do aplicativo tiverem sido gravados em uma mídia de armazenamento não volátil como um banco de dados.

  • Escalabilidade Estado do aplicativo não é compartilhado entre vários servidores que servem o mesmo aplicativo, como em uma Web farm, ou entre vários processos do operador que atende o mesmo aplicativo no mesmo servidor, como em um Web garden.Seu aplicativo, portanto, não pode depender de estado do aplicativo contendo os mesmos dados do estado do aplicativo em diferentes servidores ou processos.Se o aplicativo será executado em ambientes com vários processadores ou multisservidor, use uma opção mais escalonável, como um banco de dados, para dados que devem preservar fidelidade através do aplicativo.

  • Concorrência Estado do aplicativo é de segmentação livre, que significa que dados do estado do aplicativo podem ser acessados simultaneamente por vários segmentos.Portanto, é importante garantir que quando você atualiza dados do estado do aplicativo, você faça de maneira segura para segmentação, incluindo o suporte interno de sincronização.Você pode usar os métodos Lock e UnLock para garantir a integridade dos dados, bloqueando os dados para gravação por apenas uma fonte de cada vez.Você também pode reduzir a probabilidade de problemas de concorrência pela inicialização dos valores do estado do aplicativo no método Application_Start no arquivo Global.asax.Para obter mais informações, consulte: Ciclo de Vida do Aplicativo ASP.NET uma visão geral para o IIS 5.0 e 6.0.

Consulte também

Tarefas

Como: Salvar valores no estado do aplicativo

Como: Ler valores de estado do aplicativo

Conceitos

Visão Geral sobre o Gerenciamento de Estado do ASP.NET

Outros recursos

O Que Há de Novo no Gerenciamento de Estado ASP.NET