Compartilhar via


Visão geral sobre desempenho

Desempenho pode ser um fator-chave em um site bem-sucedido ou projeto.Este tópico fornece diretrizes para melhorar o desempenho de um site, bem sistema autônomo links para documentação de práticas recomendadas.

Esse tópico contém:

  • Práticas recomendadas

  • Segundo plano

  • Exemplos de código

Práticas recomendadas

A lista a seguir fornece links para recursos no site da Microsoft que descrevem geral melhor desempenho do site de práticas recomendadas para a Web do ASP.NET.

Back to top

Segundo plano

A seção lista as técnicas que você pode usar para ajudar a maximizar o desempenho de aplicativos ASP.NET.As diretrizes são divididas nas seções a seguir:

  • Página e processamento de controle servidor

  • Gerenciamento de estado

  • Acesso a dados

  • Aplicativos da Web

  • Codificação recomendada

Página e processamento de controle servidor

As seguintes diretrizes sugerem maneiras de trabalhar com páginas ASP.NET e controles com eficiência.

  • Evitar trajetórias de ida e volta para o servidor desnecessárias   Em algumas situações, você pode usar o ASP.NET AJAX e o renderização parcial da página para realizar tarefas no navegador de código sem executar um postback completo.Por exemplo, você pode usar recursos do ASP.NET AJAX para validar a entrada do usuário no navegador para que a entrada seja enviada ao servidor.Para obter mais informações, consulte ASP.NET AJAX Overview e Visão geral de renderização de página parcial.

  • Em geral, se você não tiver informações de retransmissão para o servidor a ser verificada ou ser gravados em um armazenamento de dados, você pode melhorar o desempenho da página (e, portanto, a experiência do usuário), evitando trajetórias de ida e volta para o servidor.

  • Se você desenvolver controles de servidor personalizados, considere a possibilidade de projetá-los para processar o script de cliente para algumas das suas funcionalidades.Isso pode reduzir significativamente o número de vezes que informações são enviadas para o servidor Web.Para obter mais informações, consulte Desenvolvendo Controles Personalizados ASP.NET Server e Criando Scripts de Cliente Personalizado Usando a Biblioteca Microsoft AJAX.

  • Use a propriedade IsPostBack do objeto da página para evitar processamento desnecessário   Evitar a execução de código em cada nova postagem se tiver apenas executar a primeira time a página é solicitada.Você pode testar o IsPostBack propriedade para condicionalmente executar código dependendo se a página está sendo executada em resposta a um evento de controle do servidor.

  • Deixe o armazenamento em buffer a menos que você tenha um motivo específico para desativá-lo Há um custo de desempenho significativo para desabilitar o armazenamento em buffer de páginas da Web ASP.NET.Para obter mais informações, consulte a propriedade Buffer.

  • Use o Transfer método do objeto Server ou uso entre páginas postar para redirecionar entre páginas ASP.NET no mesmo aplicativopara obter mais informações, consulte Redirecionando Usuários para Outra Página.

Gerenciamento de estado

As seguintes diretrizes sugerem maneiras de tornar o gerenciamento de estado eficiente.

  • salvar o modo estado do servidor controle somente quando necessário   Estado de exibição permite que os controles do servidor preencham novamente valores de propriedade em uma viagem de ida e volta sem a necessidade de escrever código.No entanto, estado de exibição afeta o dimensionar de página e o desempenho porque ele é passado para e do servidor em um campo de formulário oculto.Se estiver vinculando um controle de servidor a dados em cada viagem de ida e volta, salvo estado de exibição não é útil, porque valores do controle são substituídos por novos valores durante a vinculação de dados.Nesse caso, desativando o modo estado economiza tempo de processamento e reduz o tamanho da página.

    Por padrão, o estado de exibição está habilitado para todos os controles do servidor.Para desativá-lo para um controle, conjunto EnableViewState propriedade para false, sistema autônomo no exemplo a seguir:

    <asp:datagrid EnableViewState="false" datasource="..." 
       />
    

    Você também pode desabilitar o modo estado para uma página usando o @ Page diretiva, conforme mostrado no exemplo a seguir:

    <%@ Page EnableViewState="false" %>
    

    Isso é útil quando a página não requer processamento postback.

    Observação:

    O EnableViewState Também há suporte para o atributo na @ Controle diretiva para especificar se o estado de exibição está habilitado para um controle de usuário.

    To analyze the size of view state for a page, enable tracing for the page by setting trace="true" in the @ Page directive.Na saída do rastreamento, examinar o ViewState coluna de do Hierarquia de controle tabela.Para obter mais informações, consulte Visão geral do rastreamento no ASP.NET.

  • Evite usar criptografia de estado de exibição, a menos que você tenha para   Criptografia do modo estado impede que os usuários ler valores do estado de exibição no campo de formulário oculto do estado de exibição.Por exemplo, você pode criptografar o estado de exibição se uma página incluir um GridView controle mantém um campo de identificador de DataKeyNames propriedade para coordenar atualizações de registros. Por não optarem o identificador a ser visíveis aos usuários, você pode criptografar o estado de exibição.No entanto, criptografia tem um custo para a inicialização de desempenho constante e tem um custo adicional que depende o dimensionar do estado de exibição que está sendo criptografado.Criptografia é executada sempre que a página é carregada.Portanto, o mesmo efeito de desempenho ocorre quando a página é solicitada pela primeira vez e durante cada postback.

  • desabilitar estado de sessão quando não estiver usando   Para desabilitar estado de sessão para uma página, defina o EnableSessionState o atributo na @ Page diretiva false, sistema autônomo no exemplo a seguir:

    <%@ Page EnableSessionState="false" %>
    
    Observação:

    Se uma página requer acesso a variáveis da sessão mas não irá criar ou modificá-los, conjunto o EnableSessionState attribute in the @ Page directive to ReadOnly.

    Você também pode desabilitar estado de sessão para métodos de serviço Web do ASP.NET.Para obter mais informações, consulte Visão geral sobre Serviços de Aplicativos ASP.NET.

    Para desativar o estado de sessão para um aplicativo, defina o atributo Mode para Off na seção SessionState do arquivo Eeb.config do aplicativo, como no exemplo a seguir:

    <sessionState mode="Off" />
    
  • escolher o provedor de estado de sessão apropriado para seu aplicativo   ASP.NET fornece várias maneiras de armazenar dados de sessão para seu aplicativo.Isso inclui o estado da sessão em processo, estado da sessão fora de processo sistema autônomo um serviço do Windows e estado de sessão fora de processo em um banco de dados do SQL servidor.(Você também pode criar um provedor de estado de sessão personalizado para armazenar dados de sessão em um armazenamento de dados que você especificar). Cada abordagem possui vantagens, mas estado de sessão em processo, de longe é a abordagem mais rápida.Se você estiver usando o estado de sessão somente para pequenas quantidades de dados em estado de sessão, use o provedor em processo.Use opções de estado de sessão fora de processo se você dimensionar seu aplicativo em vários processadores ou vários computadores ou se você deseja manter os dados da sessão quando um servidor ou processo for reiniciado.Para obter mais informações, consulte Visão geral sobre Estado de sessão ASP.NET.

Dados do Access

As seguintes diretrizes sugerem maneiras de tornar o acesso a dados em seu aplicativo eficiente.

  • Usar o SQL servidor e stored procedures para acesso a dados   O SQL servidor é a escolha recomendada para o armazenamento de dados criar aplicativos da Web de alto desempenho e dimensionáveis.Quando você usa o provedor gerenciado do SQL servidor, pode obter um aumento adicional de desempenho usando compilados procedimentos armazenados sempre que possível, em vez de usar comandos SQL.Para obter mais informações, consulte: Working with Parâmetros Comando.

  • Usar a classe SqlDataReader para um cursor somente de encaminhar rápido de dados   The SqlDataReader classe cria um fluxo de dados somente de encaminhar, somente leitura que é obtido de um banco de dados do SQL servidor. The SqlDataReader classe usa o formato de transferência de dados de rede nativo do SQL servidor ler dados diretamente de uma conexão de banco de dados. Se for prático, use o SqlDataReader classe, porque ele oferece um desempenho melhor do que o DataSet classe. Por exemplo, quando você BIND um controle de dados para o SqlDataSource controle, você irá obter um melhor desempenho se você conjunto o DataSourceMode propriedade para DataReader. (Entretanto, um leitor de dados suporta menos funcionalidade que DataSet modo). The SqlDataReader classe implementa a IEnumerable interface permite que você vincule controles de servidor para ela. Para mais informações, consulte as classes SqlDataReader e Acessando Dados com o ASP.NET.

  • Cache de dados e página sempre que possível de saída   Use o cache do ASP.NET se tiver páginas ou dados ser calculadas dinamicamente para cada solicitação da página.Se possível, solicitações de páginas e dados para armazenamento em cache, especialmente em situações onde você espera tráfego pesado de design.Usando o cache apropriadamente, você pode melhorar o desempenho do seu site mais de usando qualquer Outros recurso do .NET estrutura.

    Quando você usa o cache do ASP.NET, siga estas diretrizes.Primeiro, não armazenar em cache muitos itens, porque cada item em cache requer memória do servidor.Por exemplo, não armazenar em cache itens que são com com facilidade recalculados ou raramente usados.Em segundo lugar, não atribua um time de expiração curtos para itens armazenados em cache.Itens que expirarem rapidamente podem fazer com que o trabalho extra para o código de limpeza e para o coletor de lixo.Você pode monitorar a renovação no cache é causado por itens expirados, usando o contador de desempenho de taxa de renovação do cache total associado ao objeto de desempenho de aplicativos ASP.NET.Uma taxa alta de giro pode indicar um problema, especialmente quando itens são removidos antes que eles expirarem.(Essa situação é algumas vezes conhecida como pressão de memória.)

    Para obter informações adicionais sobre como cache pagina solicitações de saída de dados, consulte Visão geral do cache no ASP.NET.

  • Usar dependência de cache SQL adequadamente   Para armazenamento em cache de dados do SQL servidor, o ASP.NET oferece suporte a notificação de consulta, dependendo da versão do SQL servidor que você está usando e de sondagem com base em tabela.Pesquisa com base em tabela dá suporte para todas as versões do SQL Server.Na sondagem com base em tabela, se os dados em uma tabela for alterada, todos os itens do cache que são dependentes da tabela são invalidados.Isso pode causar giro desnecessário no cache.sondagem com base em tabela não é recomendada para tabelas que possuem alterações freqüentes.Por exemplo, sondagem com base em tabela deve ser recomendável para uma tabela de catálogo que altera raramente.Não deve ser recomendável para uma tabela de pedidos é atualizada com freqüência.

    Notificação de consulta é suportada por SQL Server 2005 e versões posteriores. Notificação de consulta usa consultas SQL para detectar alterações em um conjunto direcionado de linhas.Isso reduz o número de notificações enviadas quando uma tabela é alterada.Notificação de consulta pode fornecer um desempenho melhor do que sondagem com base em tabela.No entanto, não é dimensionado para milhares de consultas.

    Para obter mais informações sobre dependência de cache SQL, consulte Demonstra Passo a passo: Usando o cache com o SQL servidor de saída do ASP.NET e Armazenamento em ASP.NET com a Classe SqlCacheDependency.

  • **Use paginação de fonte de dados e classificação em vez de UI (interface do usuário) de paginação e classificação   **O recurso de paginação da interface do usuário de controles de dados, sistema autônomo DetailsView e GridView pode ser usado com qualquer objeto de fonte de dados que ofereça suporte a ICollection interface. Para cada operação de paginação, os dados controle consultas a fonte de dados para a coleta de dados inteira, seleciona a linha ou linhas para exibir e, em seguida, descarta os dados restantes.

    Se um controle de fonte de dados implementa DataSourceView e se o CanPage propriedade para retornar true, o controle de dados usa a paginação de fonte de dados em vez de paginação UI. Nesse caso, os dados controlam solicitações somente as linhas que são necessários para cada página a ser exibido.Portanto, a paginação de fonte de dados é mais eficiente que paginação UI.Entre os controles ASP.NET padrão, somente o ObjectDataSource e LinqDataSource controle de fonte de dados suporta paginação de fonte de dados. Para ativar a paginação de fonte de dados para outros controles de fonte de dados, você pode herdar do controle da fonte de dados que você deseja usar e, em seguida, modificar seu comportamento.

  • **Usar uma coluna de carimbo de data/hora para controle de simultaneidade com o controle LinqDataSource   **Se uma tabela de banco de dados do SQL servidor não contiver um Timestamp coluna (um tipo de dados SQL servidor), o LinqDataSource controle verifica dados simultaneidade, armazenar os valores de dados original na página da Web. O LINQ to SQL verifica os valores originais em relação ao banco de dados antes de atualiza ou exclui os dados.Essa abordagem pode criar um grande página da Web se o registro de dados contém várias colunas ou valores grandes da coluna.Isso também pode representar um risco de segurança se o registro contiver dados que você não deseja expor na página.Quando uma tabela de banco de dados tem um Timestamp coluna, o LinqDataSource controle armazena apenas o valor de carimbo de data/hora para comparações de futuros. O LINQ to SQL pode verificar a consistência dos dados, determinando se o carimbo de data/hora original coincide com o valor de carimbo de data/hora corrente na tabela.Para obter mais informações sobre os carimbos de data/hora, consulte carimbo de data/hora (Transact-SQL) no MSDN Web site.

  • Custo de equilibrar o benefício de segurança do evento de validação com seu desempenho Controles que derivam de classes System.Web.UI.WebControls e System.Web.UI.HtmlControls podem validar um evento proveniente da interface do usuário que foi processado pelo controle.Isso evita que o controle responda a notificação de evento.Por exemplo, usando o evento de validação, a DetailsView controle pode impedir que um usuário mal-intencionado faça uma telefonar excluir (que não há suporte a herança no controle) e manipular o controle nos dados excluídos. Evento de validação tem alguns custos de desempenho.Você pode controlar o evento de validação usando o EnableEventValidation elemento de configuração e o RegisterForEventValidation método. O custo de validação depende do número de controles na página e está no intervalo de poucas porcentagens.

    Observação de segurança:

    É altamente recomendável você não desativar a validação do evento.Antes de desabilitar evento de validação Certifique-se que não pode ser construído nenhum postback que teria um efeito não intencional no seu aplicativo.

  • **Usar controle SqlDataSource de cache, ordenação e filtragem   **Se o DataSourceMode propriedade das SqlDataSource controle estiver definida como DataSet, o SqlDataSource controle pode armazenar em cache o resultado vindo da consulta. The SqlDataSource do controle de filtragem e classificação de operações podem usar os dados armazenados em cache. Um aplicativo pode executar mais rapidamente se armazenar em cache o dataset inteiro e se você usar o FilterExpression e SortParameterName Classificar e filtrar as propriedades. O controle da fonte de dados, evite fazer consultas SQL com WHERE e classificar por cláusulas para acessar o banco de dados toda vez que os usuários classificar ou filtrar dados em interface do usuário.

Aplicativos da Web

sistema autônomo seguintes diretrizes sugerem maneiras de tornar aplicativos Web sistema autônomo um todo trabalhar de forma eficiente.

  • Pré-compilar o site   Um aplicativo Web é compilado em lote na primeira solicitação para um recurso sistema autônomo uma página da Web do ASP.NET.Se nenhuma página no aplicativo foi compilada, a compilação em lotes compila todas as páginas em um diretório em partes para melhorar o uso de disco e de memória.Você pode usar o Ferramenta de compilação ASP.NET (Aspnet_compiler.exe) para pré-compilar um aplicativo Web Web.Para compilação in-loco, a ferramenta de compilação chama o tempo de execução do ASP.NET para compilar o site da mesma forma que quando um usuário solicita uma página do site.Você pode pré-compilar um aplicativo da Web de modo que a marcação da interface do usuário seja preservada, ou pré-compilar as páginas de forma que o código-fonte não possa ser alterado.Para obter mais informações, consulte Como: Precompile ASP.NET Web Sites.

  • desabilitar o modo de depurar   Sempre desative o modo de depurar antes de implantar um aplicativo de produção ou realizar qualquer medidas de desempenho.Se o modo de depurar estiver ativado, o desempenho do aplicativo pode ser reduzido.Para obter informações sobre como conjunto o modo de depurar, consulte Editando Arquivos de Configuração ASP.NET.

  • Ajustar os arquivos de configuração para o computador do servidor Web e para aplicativos específicos   A configuração padrão para ASP.NET permite que o conjunto mais largo de recursos e cenários mais comuns.Você pode alterar algumas configurações padrão para melhorar o desempenho dos aplicativos, dependendo dos recursos que você usa.A lista a seguir inclui as alterações de configuração que você deve considerar:

    • Ativar autenticação somente para aplicativos que precise    Por padrão, o modo de autenticação para aplicativos ASP.NET é Windows, ou NTLM integrada.Na maioria dos casos ele é ideal desativar a autenticação no arquivo Machine.config e ativá-la nos arquivos Web.config somente para aplicativos que precisem.

    • Configurar seu aplicativo para as configurações de codificação de solicitação e resposta apropriadas    No ASP.NET, a codificação padrão é UTF-8.Se o aplicativo usar apenas caracteres ASCII, configurar seu aplicativo para ASCII para uma melhoria de desempenho pequeno.

    • Desabilitar AutoEventWireup para seu aplicativo   Configurando o AutoEventWireup atributo à false na Web. arquivo de configuração impede que a página de ligação de eventos de página a métodos com base em uma correspondência de nome (por exemplo, Page_Load). Dessa forma, páginas de um aumento de desempenho pequeno.Para manipular eventos de página, use uma das duas estratégias.A primeira estratégia é substituir os métodos.Por exemplo, você pode substituir o OnLoad método para o Page objeto escrever código para o evento carregar página. (Certifique-se de que você chama o método base para certificar-se de que todos os eventos são disparados.) A segunda estratégia é BIND a eventos de página usando o Trata palavra-chave no Visual Basic ou usando o delegado wire-up no translation from VPE for Csharp.

    • Remover módulos não utilizados do canal de processamento de solicitação de   Por padrão, todos os recursos são deixados ativo no HttpModules nó no arquivo Machine.config no computador do servidor da Web. Dependendo de quais recursos o aplicativo usa, você pode remover módulos não utilizados do pipeline de solicitação para obter um aumento de desempenho pequeno.Revisar cada módulo e sua funcionalidade e personalizá-lo às suas necessidades.Por exemplo, se você não usar estado de sessão e saída cache em seu aplicativo, você pode remover os módulos para esses recursos from a HttpModules lista.

  • Executar aplicativos Web fora de processo no Serviços de Informações da Internet 5.0   Por padrão, o ASP.NET no Serviços de Informações da Internet 5.0 atenderá solicitações usando um processo do operador fora de processo.Esse recurso foi ajustado para taxa de transferência rápida.Devido seus recursos e vantagens, executar ASP.NET em um processo operado fora de processo é recomendado para sites de produção.

  • Reciclar processos periodicamente    Você deve reciclar processos periodicamente, para estabilidade e desempenho.Em longos períodos de tempo, recursos com vazamentos de memória e erros podem afetar a taxa de transferência do servidor Web e reciclagem processos limpa a memória desses tipos de problemas.No entanto, você deve equilibrar a necessidade de periodicamente reciclar com reciclagem muito freqüentemente, porque o custo de interromper o processo de trabalho, recarregar páginas e recursos e dados re-obtaining pode substituir os benefícios da reciclagem.

    Aplicativos da Web do ASP.NET que são executados no Windows servidor 2003 e IIS 6.0 não requerem um ajuste para o modelo de processo, porque ASP.NET usará as configurações de modelo de processo do IIS 6.0.

  • conjunto o número de segmentos por processo de trabalho corretamente para seu aplicativo   A arquitetura de solicitação do ASP.NET tenta obter um equilíbrio entre o número de segmentos que estão executando solicitações e recursos disponível.A arquitetura permite somente o número de simultaneamente execução solicitações para o qual potência de CPU disponível.Essa técnica é conhecida como retenção de segmento.Entretanto, existem condições em que o algoritmo de obter segmento não funciona bem.Você pode monitorar thread retenção de monitor de desempenho do Windows usando o contador de desempenho Pipeline instância Count associado ao objeto de desempenho de aplicativos ASP.NET.

    Quando uma página da Web do ASP.NET chama um recurso externo, sistema autônomo quando acessa um banco de dados ou processa solicitações de serviço Web do ASP.NET, a solicitação de página geralmente pára até que o recurso externo responde.Isso libera a CPU processo outros threads.Se outra solicitação está aguardando para ser processo ed e um thread disponível no pool de segmentos, a solicitação espera começará a processo.O resultado pode ser muitas solicitações executando simultaneamente e muitos segmentos em espera no processo do operador ASP.NET ou pool de aplicativos.Isso pode impedir a taxa de transferência do servidor da Web e afetar negativamente o desempenho.

    Para reduzir esse efeito no desempenho, você pode conjunto manualmente o limite no número de segmentos no processo.Para fazer isso, altere o MaxWorkerThreads e MaxIOThreads atributos na processModel seção do arquivo computador.config.

    Observação:

    Segmentos de trabalho são para processar solicitações do ASP.NET .Threads de E/S são usado para dados do serviço de arquivos, bancos de dados, ou ASP.NET Web serviços .

    Os valores que você atribui aos atributos do modelo de processo representam o número máximo de cada tipo de segmento por CPU no processo.Para um computador com dois processadores, o número máximo é duas vezes o conjunto valor.Para um computador de quatro processadores, ele é quatro vezes o valor definido.As configurações padrão são apropriadas para computadores de um processador e os dois processadores.No entanto, 100 ou 200 segmentos no processo para computadores que têm mais de dois processadores podem reduzir o desempenho.Se houver muitos segmentos em um processo, podem reduzir a velocidade.O servidor deve executar alternâncias de contexto extra, que faz com que o sistema operacional gastar ciclos de CPU para manter segmentos em vez de processar solicitações.Para determinar o que é o número apropriado de segmentos, seu aplicativo de teste de desempenho.

  • Para aplicativos que dependam amplamente do recursos externos, ativar Web gardening em computadores com multiprocessador   Ajuda o modelo de processo do ASP.NET melhorar desempenho em computadores multiprocessados distribuindo trabalho para vários processos, um por CPU, cada um com afinidade de processador definida como uma CPU.Essa técnica é às vezes chamada de Jardinagem de Web.Aplicativos da Web podem se beneficiar da Web gardening se eles usarem recursos externos extensivamente.Por exemplo, aplicativos podem se beneficiar se eles usam um servidor de banco de dados ou se eles chamam objetos COM que possuem dependências externas.No entanto, teste o desempenho de um aplicativo Web Web em um ambiente Web antes de ativar Web gardening para um site de produção.

Codificação recomendada

As seguintes diretrizes sugerem maneiras de escrever código eficiente.

  • Não confie nas exceções em seu código   Exceções podem causar desempenho diminuir significativamente.Portanto, evite usá-las sistema autônomo uma maneira de controlar o fluxo normal do programa.Se possível, inclua lógica em seu código para detectar e manipular condições que possam causar uma exceção.Cenários comuns para detectar no código incluem verificar null, Analisando cadeias de caracteres em valores numéricos e verificando valores específicos antes de operações matemáticas. Os exemplos a seguir mostram o código que pode causar uma exceção e Mostrar código alternativo que testa uma condição.Ambos os exemplos produzem o mesmo resultado.

    // This is not recommended.
    try {
       result = 100 / num;
    }
    catch (Exception e) {
      result = 0;
    }
    
    // This is preferred.
    if (num != 0)
       result = 100 / num;
    else
      result = 0;
    
    ' This is not recommended.
    Try
       result = 100 / num
    Catch (e As Exception)
      result = 0
    End Try
    
    ' This is preferred.
    If Not (num = 0)
       result = 100 / num
    Else
      result = 0
    End If
    

Exemplos de código

Tópicos Como Fazer e Passo a passo

Como: Exibir os contadores de desempenho do ASP.NET disponível em seu computador

Como: Precompile ASP.NET Web Sites

Demonstra Passo a passo: Usando o cache com o SQL servidor de saída do ASP.NET

Walkthrough: Criando um site da Web AJAX-ativado

Back to top

Consulte também

Conceitos

Monitorando o desempenho de aplicativos ASP.NET

Contadores de desempenho para ASP.NET

Criação e configuração para desempenho

Considerações sobre Desempenho para Aplicativos usando Serviços

Adicionar recursos de cliente e AJAX

Referência

Back to top

Outros recursos

ASP.NET Caching