Contadores de desempenho no .NET Framework

Nota

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

Este artigo fornece uma lista de contadores de desempenho que você pode encontrar no Monitor de Desempenho do Windows.

Contadores de desempenho de exceção

A categoria Exceções CLR do .NET inclui contadores que fornecem informações sobre as exceções lançadas por um aplicativo. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# de Excertos Lançados Exibe o número total de exceções lançadas desde que o aplicativo foi iniciado. Isso inclui exceções do .NET e exceções não gerenciadas que são convertidas em exceções do .NET. Por exemplo, um HRESULT retornado de código não gerenciado é convertido em uma exceção no código gerenciado.

Esse contador inclui exceções manipuladas e não tratadas. As exceções que são relançadas são contadas novamente.
# de Exceps Thrown / Sec Exibe o número de exceções lançadas por segundo. Isso inclui exceções do .NET e exceções não gerenciadas que são convertidas em exceções do .NET. Por exemplo, um HRESULT retornado de código não gerenciado é convertido em uma exceção no código gerenciado.

Esse contador inclui exceções manipuladas e não tratadas. Não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral. Este contador é um indicador de potenciais problemas de desempenho se um grande número (>100s) de exceções for lançado.
# de Filtros / seg Exibe o número de filtros de exceção do .NET executados por segundo. Um filtro de exceção avalia independentemente de uma exceção ser tratada.

Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
# de Finalmentes / Sec Exibe o número de blocos finalmente executados por segundo. Um bloco final é garantido para ser executado, independentemente de como o bloco try foi saído. Apenas os blocos finais executados para uma exceção são contados; Finalmente, os blocos em caminhos de código normais não são contados por este contador.

Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Lançar para pegar profundidade / seg Exibe o número de quadros de pilha percorridos, do quadro que lançou a exceção para o quadro que manipulou a exceção, por segundo. Esse contador é redefinido como zero quando um manipulador de exceções é inserido, de modo que as exceções aninhadas mostram a profundidade da pilha do manipulador para manipulador.

Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.

Contadores de desempenho de interoperabilidade

A categoria de interoperabilidade CLR do .NET inclui contadores que fornecem informações sobre a interação de um aplicativo com componentes COM, serviços COM+ e bibliotecas de tipos externos. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# de CCWs Exibe o número atual de wrappers chamáveis COM (CCWs). Um CCW é um proxy para um objeto gerenciado que está sendo referenciado de um cliente COM não gerenciado. Esse contador indica o número de objetos gerenciados referenciados pelo código COM não gerenciado.
# de marshaling Exibe o número total de vezes que argumentos e valores de retorno foram empacotados de código gerenciado para não gerenciado e vice-versa, desde que o aplicativo foi iniciado. Este contador não é incrementado se os stubs estiverem embutidos. (Os stubs são responsáveis por organizar argumentos e valores de retorno). Os stubs são geralmente embutidos se a sobrecarga de empacotamento for pequena.
# de Stubs Exibe o número atual de stubs criados pelo common language runtime. Os stubs são responsáveis por organizar argumentos e valores de retorno de código gerenciado para código não gerenciado, e vice-versa, durante uma chamada de interoperabilidade COM ou uma chamada de invocação de plataforma.
# de exportações TLB / seg Reservado para uso futuro.
# de importações TLB / seg Reservado para uso futuro.

Contadores de desempenho JIT

A categoria .NET CLR JIT inclui contadores que fornecem informações sobre o código que foi compilado pelo JIT. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# de IL Bytes JITted Exibe o número total de bytes de linguagem intermediária comum (CIL) compilados pelo compilador just-in-time (JIT) desde que o aplicativo foi iniciado. Este contador é equivalente ao Total # do contador Jitted de IL Bytes.
# de Métodos JITted Exibe o número total de métodos compilados por JIT desde que o aplicativo foi iniciado. Este contador não inclui métodos compilados pré-JIT.
% Tempo em Jit Exibe a porcentagem de tempo decorrido gasto na compilação JIT desde a última fase de compilação JIT. Este contador é atualizado no final de cada fase de compilação JIT. Uma fase de compilação JIT ocorre quando um método e suas dependências são compilados.
IL Bytes Jitted / seg Exibe o número de bytes CIL compilados por JIT por segundo. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Falhas Jit padrão Exibe o número máximo de métodos que o compilador JIT não conseguiu compilar desde que o aplicativo foi iniciado. Essa falha pode ocorrer se a CIL não puder ser verificada ou se houver um erro interno no compilador JIT.
Total # de IL Bytes Jitted Exibe o total de bytes CIL compilados JIT desde que o aplicativo foi iniciado. Este contador é equivalente ao # do contador de Jitted de Bytes IL.

Carregando contadores de desempenho

A categoria .NET CLR Loading inclui contadores que fornecem informações sobre assemblies, classes e domínios de aplicativo carregados. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
% de tempo de carregamento Reservado para uso futuro.
Comprimento da pesquisa de montagem Reservado para uso futuro.
Bytes na pilha do carregador Exibe o tamanho atual, em bytes, da memória confirmada pelo carregador de classes em todos os domínios de aplicativo. A memória confirmada é o espaço físico reservado no arquivo de paginação do disco.
Appdomains atuais Exibe o número atual de domínios de aplicativo carregados neste aplicativo.
Assembléias atuais Exibe o número atual de assemblies carregados em todos os domínios de aplicativo no aplicativo em execução no momento. Se o assembly for carregado como domínio neutro a partir de vários domínios de aplicativo, esse contador será incrementado apenas uma vez.
Classes atuais carregadas Exibe o número atual de classes carregadas em todos os assemblies.
Taxa de appdomains Exibe o número de domínios de aplicativo carregados por segundo. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Taxa de appdomains descarregados Exibe o número de domínios de aplicativo descarregados por segundo. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Taxa de Montagens Exibe o número de assemblies carregados por segundo em todos os domínios de aplicativo. Se o assembly for carregado como domínio neutro a partir de vários domínios de aplicativo, esse contador será incrementado apenas uma vez.

Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Taxa de classes carregadas Exibe o número de classes carregadas por segundo em todos os assemblies. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Taxa de falhas de carga Exibe o número de classes que falharam ao carregar por segundo. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.

Falhas de carregamento podem ocorrer por muitos motivos, como segurança inadequada ou formato inválido. Para obter detalhes, consulte a Ajuda dos serviços de criação de perfil.
Total # de falhas de carga Exibe o número máximo de classes que falharam ao carregar desde que o aplicativo foi iniciado.

Falhas de carregamento podem ocorrer por muitos motivos, como segurança inadequada ou formato inválido. Para obter detalhes, consulte a Ajuda dos serviços de criação de perfil.
Total Appdomains Exibe o número máximo de domínios de aplicativo carregados desde que o aplicativo foi iniciado.
Total de appdomains descarregados Exibe o número total de domínios de aplicativo descarregados desde que o aplicativo foi iniciado. Se um domínio de aplicativo for carregado e descarregado várias vezes, esse contador será incrementado cada vez que o domínio do aplicativo for descarregado.
Total de montagens Exibe o número total de assemblies carregados desde que o aplicativo foi iniciado. Se o assembly for carregado como domínio neutro a partir de vários domínios de aplicativo, esse contador será incrementado apenas uma vez.
Total de classes carregadas Exibe o número cumulativo de classes carregadas em todos os assemblies desde que o aplicativo foi iniciado.

Contadores de desempenho de bloqueio e thread

A categoria .NET CLR LocksAndThreads inclui contadores que fornecem informações sobre bloqueios gerenciados e threads que um aplicativo usa. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# de Threads lógicos atuais Exibe o número de objetos de thread gerenciados atuais no aplicativo. Esse contador mantém a contagem de threads em execução e interrompidos. Este contador não é uma média ao longo do tempo; ele exibe apenas o último valor observado.
# de Threads físicos atuais Exibe o número de threads nativos do sistema operacional criados e de propriedade do common language runtime para atuar como threads subjacentes para objetos de thread gerenciados. O valor desse contador não inclui os threads usados pelo tempo de execução em suas operações internas; é um subconjunto dos threads no processo do sistema operacional.
# de threads reconhecidos atualmente Exibe o número de threads que são atualmente reconhecidos pelo tempo de execução. Esses threads estão associados a um objeto de thread gerenciado correspondente. O tempo de execução não cria esses threads, mas eles foram executados dentro do tempo de execução pelo menos uma vez.

Apenas threads exclusivos são rastreados; threads com o mesmo ID de thread que reentram no tempo de execução ou são recriados após as saídas do thread não são contados duas vezes.
# do total de Threads reconhecidos Exibe o número total de threads que foram reconhecidos pelo tempo de execução desde que o aplicativo foi iniciado. Esses threads estão associados a um objeto de thread gerenciado correspondente. O tempo de execução não cria esses threads, mas eles foram executados dentro do tempo de execução pelo menos uma vez.

Apenas threads exclusivos são rastreados; threads com o mesmo ID de thread que reentram no tempo de execução ou são recriados após as saídas do thread não são contados duas vezes.
Taxa de contenção / seg Exibe a taxa na qual os threads no tempo de execução tentam adquirir um bloqueio gerenciado sem êxito.
Comprimento da fila atual Exibe o número total de threads que estão atualmente aguardando para adquirir um bloqueio gerenciado no aplicativo. Este contador não é uma média ao longo do tempo; ele exibe o último valor observado.
Comprimento da fila / seg Exibe o número de threads por segundo que estão aguardando para adquirir um bloqueio no aplicativo. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Pico do comprimento da fila Exibe o número total de threads que aguardaram para adquirir um bloqueio gerenciado desde que o aplicativo foi iniciado.
taxa de threads reconhecidos / seg Exibe o número de threads por segundo que foram reconhecidos pelo tempo de execução. Esses threads estão associados a um objeto de thread gerenciado correspondente. O tempo de execução não cria esses threads, mas eles foram executados dentro do tempo de execução pelo menos uma vez.

Apenas threads exclusivos são rastreados; threads com o mesmo ID de thread que reentram no tempo de execução ou são recriados após as saídas do thread não são contados duas vezes.

Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Total # de Contenções Exibe o número total de vezes que threads no tempo de execução tentaram adquirir um bloqueio gerenciado sem êxito.

Contadores de desempenho de memória

A categoria Memória CLR do .NET inclui contadores que fornecem informações sobre o coletor de lixo. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# Bytes em todas as pilhas Exibe a soma dos contadores Tamanho da pilha Gen 1, Tamanho da pilha Gen 2 e Tamanho da pilha de objeto grande. Esse contador indica a memória atual alocada em bytes nas pilhas de coleta de lixo.
# Alças GC Exibe o número atual de identificadores de coleta de lixo em uso. Os identificadores de coleta de lixo são identificadores para recursos externos ao Common Language Runtime e ao ambiente gerenciado.
# Coleções Gen 0 Exibe o número de vezes que os objetos da geração 0 (ou seja, os objetos mais recentes e alocados mais recentemente) são coletados desde que o aplicativo foi iniciado.

A coleta de lixo da geração 0 ocorre quando a memória disponível na geração 0 não é suficiente para satisfazer uma solicitação de alocação. Esse contador é incrementado no final de uma coleta de lixo de geração 0. As coletas de lixo de geração mais alta incluem todas as coletas de geração inferior. Esse contador é explicitamente incrementado quando ocorre uma coleta de lixo de geração superior (geração 1 ou 2).

Este contador exibe o último valor observado. O valor do contador _Global_ não é preciso e deve ser ignorado.
# Coleções Gen 1 Exibe o número de vezes que os objetos da geração 1 são coletados desde que o aplicativo foi iniciado.

O contador é incrementado no final de uma coleta de lixo de geração 1. As coletas de lixo de geração mais alta incluem todas as coletas de geração inferior. Esse contador é explicitamente incrementado quando ocorre uma coleta de lixo de geração superior (geração 2).

Este contador exibe o último valor observado. O valor do contador _Global_ não é preciso e deve ser ignorado.
# Coleções Gen 2 Exibe o número de vezes que os objetos da geração 2 são lixo coletado desde que o aplicativo foi iniciado. O contador é incrementado no final de uma coleta de lixo de geração 2 (também chamada de coleta de lixo completa).

Este contador exibe o último valor observado. O valor do contador _Global_ não é preciso e deve ser ignorado.
# GC induzido Exibe o número máximo de vezes que a coleta de lixo foi realizada devido a uma chamada explícita para GC.Collect. É uma boa prática deixar o coletor de lixo sintonizar a frequência de suas coletas.
# de objetos fixos Exibe o número de objetos fixados encontrados na última coleta de lixo. Um objeto fixo é um objeto que o coletor de lixo não pode mover na memória. Este contador rastreia objetos fixados apenas nas pilhas que são lixo coletado. Por exemplo, uma coleta de lixo de geração 0 causa enumeração de objetos fixados somente na pilha de geração 0.
# de Blocos de Pia em uso Exibe o número atual de blocos de sincronização em uso. Os blocos de sincronização são estruturas de dados por objeto alocadas para armazenar informações de sincronização. Eles contêm referências fracas a objetos gerenciados e devem ser digitalizados pelo coletor de lixo. Os blocos de sincronização não se limitam ao armazenamento de informações de sincronização; eles também podem armazenar metadados de interoperabilidade COM. Esse contador indica problemas de desempenho com o uso intenso de primitivas de sincronização.
# Total de bytes comprometidos Exibe a quantidade de memória virtual, em bytes, atualmente confirmada pelo coletor de lixo. A memória confirmada é a memória física para a qual o espaço foi reservado no arquivo de paginação do disco.
# Total de Bytes reservados Exibe a quantidade de memória virtual, em bytes, atualmente reservada pelo coletor de lixo. Memória reservada é o espaço de memória virtual reservado para o aplicativo quando nenhum disco ou páginas de memória principal foram usados.
% Tempo em GC Exibe a porcentagem de tempo decorrido que foi gasto realizando uma coleta de lixo desde o último ciclo de coleta de lixo. Esse contador geralmente indica o trabalho feito pelo coletor de lixo para coletar e compactar a memória em nome do aplicativo. Este contador é atualizado apenas no final de cada recolha de lixo. Este contador não é uma média; o seu valor reflete o último valor observado.
Bytes alocados/segundo Exibe o número de bytes por segundo alocados no heap de coleta de lixo. Este contador é atualizado no final de cada recolha de lixo, não em cada alocação. Este contador não é uma média ao longo do tempo; Exibe a diferença entre os valores observados nas duas últimas amostras dividida pela duração do intervalo amostral.
Sobreviventes da finalização Exibe o número de objetos coletados que sobrevivem a uma coleta porque estão esperando para serem finalizados. Se esses objetos mantiverem referências a outros objetos, esses objetos também sobreviverão, mas não serão contados por esse contador. O contador Memória de Finalização Promovida da Geração 0 representa toda a memória que sobreviveu devido à finalização.

Este contador não é cumulativo; Ele é atualizado no final de cada coleta de lixo com a contagem dos sobreviventes durante essa coleta específica apenas. Esse contador indica a sobrecarga extra que o aplicativo pode incorrer devido à finalização.
Tamanho da pilha Gen 0 Exibe o máximo de bytes que podem ser alocados na geração 0; ele não indica o número atual de bytes alocados na geração 0.

Uma coleta de lixo de geração 0 ocorre quando as alocações desde a última coleta excedem esse tamanho. O tamanho da geração 0 é ajustado pelo coletor de lixo e pode mudar durante a execução da aplicação. No final de uma coleção de geração 0, o tamanho da pilha de geração 0 é de 0 bytes. Esse contador exibe o tamanho, em bytes, das alocações que invocam a próxima geração de coleta de lixo 0.

Esse contador é atualizado no final de uma coleta de lixo, não em cada alocação.
Gen 0 Bytes Promovidos/Seg Exibe os bytes por segundo que são promovidos da geração 0 para a geração 1. A memória é promovida quando sobrevive a uma recolha de lixo. Este contador é um indicador de objetos de vida relativamente longa sendo criados por segundo.

Este contador exibe a diferença entre os valores observados nas duas últimas amostras dividido pela duração do intervalo amostral.
Tamanho da pilha Gen 1 Exibe o número atual de bytes na geração 1; Este contador não apresenta o tamanho máximo da Geração 1. Os objetos não são alocados diretamente nesta geração; Eles são promovidos a partir de coleções de lixo da geração anterior 0. Esse contador é atualizado no final de uma coleta de lixo, não em cada alocação.
Gen 1 Bytes Promovidos/Seg Exibe os bytes por segundo que são promovidos da geração 1 para a geração 2. Os objetos que são promovidos apenas porque estão aguardando para serem finalizados não são incluídos neste contador.

A memória é promovida quando sobrevive a uma recolha de lixo. Nada é promovido a partir da 2ª geração porque é a geração mais velha. Este contador é um indicador de objetos de vida muito longa sendo criados por segundo.

Este contador exibe a diferença entre os valores observados nas duas últimas amostras dividido pela duração do intervalo amostral.
Tamanho da pilha Gen 2 Exibe o número atual de bytes na geração 2. Os objetos não são alocados diretamente nesta geração; Eles são promovidos da Geração 1 durante as coletas de lixo da Geração 1 anterior. Esse contador é atualizado no final de uma coleta de lixo, não em cada alocação.
Tamanho da pilha de objeto grande Exibe o tamanho atual, em bytes, da pilha de objeto grande. Objetos maiores que aproximadamente 85.000 bytes são tratados como objetos grandes pelo coletor de lixo e são alocados diretamente em uma pilha especial. Não são promovidos através das gerações. Esse contador é atualizado no final de uma coleta de lixo, não em cada alocação.
ID do processo Exibe a ID do processo da instância do processo CLR que está sendo monitorada.
Finalização promovida - Memória da geração 0 Exibe os bytes de memória que são promovidos da geração 0 para a geração 1 somente porque eles estão esperando para serem finalizados. Este contador não é cumulativo; ele exibe o valor observado no final da última coleta de lixo.
Memória promovida da geração 0 Exibe os bytes de memória que sobrevivem à coleta de lixo e são promovidos da geração 0 para a geração 1. Os objetos que são promovidos apenas porque estão aguardando para serem finalizados não são incluídos neste contador. Este contador não é cumulativo; ele exibe o valor observado no final da última coleta de lixo.
Memória promovida da Gen 1 Exibe os bytes de memória que sobrevivem à coleta de lixo e são promovidos da geração 1 para a geração 2. Os objetos que são promovidos apenas porque estão aguardando para serem finalizados não são incluídos neste contador. Este contador não é cumulativo; ele exibe o valor observado no final da última coleta de lixo. Esse contador será redefinido para 0 se a última coleta de lixo tiver sido apenas uma coleta de geração 0.

Contadores de desempenho de rede

A categoria Rede CLR do .NET inclui contadores que fornecem informações sobre dados que um aplicativo envia e recebe pela rede. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
Bytes recebidos O número total acumulado de bytes recebidos por todos os Socket objetos dentro do AppDomain desde que o processo foi iniciado. Este número inclui dados e qualquer informação de protocolo que não esteja definida pelo TCP/IP.
Bytes enviados O número cumulativo de bytes enviados por todos os Socket objetos dentro do AppDomain desde que o processo foi iniciado. Este número inclui dados e qualquer informação de protocolo que não esteja definida pelo TCP/IP.
Conexões estabelecidas O número total acumulado de Socket objetos para soquetes de fluxo que já foram conectados no AppDomain desde o início do processo.
Datagramas recebidos O número total acumulado de pacotes de datagrama recebidos por todos os Socket objetos desde o início do AppDomain processo.
Datagramas enviados O número total acumulado de pacotes de datagrama enviados por todos os Socket objetos desde o início do AppDomain processo.
Vida útil média de HttpWebRequests O tempo médio até a conclusão de todos os HttpWebRequest objetos que terminaram no último intervalo desde o início do AppDomain processo.
Tempo médio de fila HttpWebRequests O tempo médio na fila para todos os HttpWebRequest objetos que saíram da fila no último intervalo desde o início do AppDomain processo.
HttpWebRequests criado/s O número de HttpWebRequest objetos criados por segundo dentro do AppDomain.
HttpWebRequests em fila/s O número de HttpWebRequest objetos que foram adicionados à fila por segundo dentro do AppDomain.
HttpWebRequests abortado/seg O número de HttpWebRequest objetos em que o aplicativo chamou o Abort método por segundo dentro do AppDomain.
HttpWebRequests falhou/seg O número de objetos que receberam um código de HttpWebRequest status com falha do servidor por segundo dentro do AppDomain.

Há várias classes de contadores de desempenho de rede suportados:

  • Contadores de eventos que medem o número de vezes que algum evento ocorreu.
  • Contadores de dados que medem a quantidade de dados enviados ou recebidos.
  • Contadores de duração que medem quanto tempo demoram diferentes processos. Os tempos são medidos nos objetos a cada intervalo (geralmente em segundos) depois que eles saem de estados diferentes.
  • Contadores por intervalo que medem o número de objetos que estão fazendo uma transição específica por intervalo (normalmente por segundo).

Os contadores de desempenho de rede para eventos incluem o seguinte:

  • Conexões estabelecidas
  • Datagramas recebidos
  • Datagramas enviados

Esses contadores de desempenho fornecem contagens desde o início do processo. As contagens de conexões estabelecidas incluem chamadas de método explícitas por um aplicativo para uma conexão de soquete de Socket fluxo que foi estabelecida, bem como chamadas internas feitas por outras classes (HttpWebRequest, , FtpWebRequestWebCliente TcpClient, por exemplo) para a Socket classe Socket

As contagens de Datagramas Recebidos e Datagramas Enviados incluem pacotes de datagramas enviados ou recebidos usando chamadas de método explícitas Socket por um aplicativo, bem como chamadas internas feitas por outras classes (UdpClient, por exemplo) para Socket. classe. As contagens de Datagramas Recebidos e Datagramas Enviados também podem ser usadas para fornecer uma medida muito bruta de quantos bytes foram enviados ou recebidos usando datagramas, assumindo um tamanho médio para um datagrama.

Os contadores de desempenho de rede para dados incluem o seguinte:

  • Bytes recebidos
  • Bytes enviados

Os contadores acima fornecem contagens de bytes desde o início do processo.

Existem dois contadores de duração que medem quanto tempo levou para HttpWebRequest os objetos passarem por todo o seu ciclo de vida ou apenas parte dele:

  • Vida útil média de HttpWebRequests
  • Tempo médio de fila HttpWebRequests

Para o contador HttpWebRequests Average Lifetime , o tempo de vida da maioria HttpWebRequest dos objetos sempre começa com o tempo em que o objeto é criado até o momento em que o fluxo de resposta é fechado pelo aplicativo. Existem dois casos pouco frequentes:

  • Se o aplicativo nunca chamar os GetResponse métodos ou BeginGetResponse , o tempo de vida do HttpWebRequest objeto será ignorado.

  • Se o HttpWebRequest objeto lançar um WebException ao chamar os GetResponse métodos or EndGetResponse , o tempo de vida termina quando a exceção é lançada. Tecnicamente, o fluxo de resposta subjacente também é fechado nesse ponto (o fluxo de resposta retornado ao usuário é realmente um fluxo de memória contendo uma cópia do fluxo de resposta).

Há quatro contadores que rastreiam determinados HttpWebRequest problemas de objeto por intervalo. Esses contadores de desempenho podem ajudar os desenvolvedores de aplicativos, administradores e a equipe de suporte a entender melhor o que os HttpWebRequest objetos estão fazendo. Os contadores incluem o seguinte:

  • HttpWebRequests criado/s
  • HttpWebRequests em fila/s
  • HttpWebRequests abortado/seg
  • HttpWebRequests falhou/seg

Para o contador HttpWebRequests Aborted/sec , as chamadas internas para Abort também são contadas. Essas chamadas internas geralmente são causadas por tempos limite que um aplicativo pode querer medir.

O contador HttpWebRequests Failed/sec contém o número de objetos que receberam um código de HttpWebRequest status com falha do servidor por segundo. Isso significa que o código de status recebido do servidor Http no final da solicitação não estava no intervalo entre 200 e 299. Os códigos de status que são manipulados e resultam em uma nova solicitação (muitos dos códigos de status 401 não autorizados, por exemplo) falharão ou não falharão com base no resultado da nova tentativa. Se o aplicativo veria um erro com base na nova tentativa, esse contador é incrementado.

Os contadores de desempenho de rede podem ser acessados e gerenciados usando as PerformanceCounter classes relacionadas no System.Diagnostics namespace. Os contadores de desempenho de rede também podem ser visualizados com o console do Monitor de Desempenho do Windows.

Os contadores de desempenho de rede precisam ser habilitados no arquivo de configuração a ser usado. Todos os contadores de desempenho de rede são habilitados ou desabilitados com uma única configuração no arquivo de configuração. Os contadores de desempenho de rede individuais não podem ser ativados ou desativados. Para obter mais informações, consulte <Elemento performanceCounter> (Configurações de rede).

Se os contadores de rede estiverem habilitados, isso criará e atualizará contadores de desempenho global e por AppDomain. Se desativado, o aplicativo não fornecerá nenhum dado do contador de desempenho de rede.

Os contadores de desempenho são agrupados em categorias. O código a seguir lista todas as categorias:

PerformanceCounterCategory[] Array = PerformanceCounterCategory.GetCategories();
for (int i = 0; i < Array.Length; i++)
{
    Console.Out.WriteLine("{0}. Name={1} Help={2}", i, Array[i].CategoryName, Array[i].CategoryHelp);
}

Os contadores de desempenho de rede estão listados em duas categorias:

  • ".NET CLR Networking" - os contadores de desempenho originais introduzidos no .NET Framework Versão 2 e suportados no .NET Framework Versão 2 e posterior.

  • ".NET CLR Networking 4.0.0.0" - Todos os contadores de soquete acima mais os novos contadores de desempenho suportados no .NET Framework Versão 4 e posterior. Esses novos contadores fornecem informações de desempenho em HttpWebRequest objetos.

Para obter mais informações sobre como acessar e gerenciar contadores de desempenho em um aplicativo, consulte Contadores de desempenho.

Contadores de desempenho de segurança

A categoria Segurança CLR do .NET inclui contadores que fornecem informações sobre as verificações de segurança que o Common Language Runtime executa para um aplicativo. A tabela a seguir descreve esses contadores de desempenho.

Contador de desempenho Description
# Verificações de tempo de link Exibe o número total de verificações de segurança de acesso ao código de tempo de link desde que o aplicativo foi iniciado. As verificações de segurança de acesso ao código de tempo de link são realizadas quando um chamador exige uma permissão específica no momento de compilação just-in-time (JIT). Uma verificação de tempo de link é realizada uma vez por chamador. Esta contagem não é indicativa de problemas graves de desempenho; é meramente indicativo da atividade do sistema de segurança.
% Tempo em verificações de RT Exibe a porcentagem de tempo decorrido gasto executando verificações de segurança de acesso ao código de tempo de execução desde o último exemplo. Esse contador é atualizado no final de uma verificação de segurança do .NET Framework. Não é uma média; representa o último valor observado.
% Tempo de Autenticação Sig Reservado para uso futuro.
Profundidade da caminhada da pilha Exibe a profundidade da pilha durante a última verificação de segurança de acesso ao código de tempo de execução. As verificações de segurança de acesso ao código de tempo de execução são realizadas percorrendo a pilha. Este contador não é uma média; ele exibe apenas o último valor observado.
Total de verificações de tempo de execução Exibe o número total de verificações de segurança de acesso ao código de tempo de execução executadas desde que o aplicativo foi iniciado. As verificações de segurança de acesso ao código de tempo de execução são executadas quando um chamador exige uma permissão específica. A verificação de tempo de execução é feita em cada chamada pelo chamador e examina a pilha de threads atual do chamador. Quando usado com o contador Stack Walk Depth , esse contador indica a penalidade de desempenho que ocorre para verificações de segurança.

Consulte também