DA0039: Muito contenções de alta taxa de bloqueio
Identificação da regra |
DA0039 |
<strong>Categoria</strong> |
.Uso do NET Framework |
Métodos de criação de perfil |
Amostragem Instrumentação .NET memória |
Message (Mensagem) |
Uma taxa alta de.Contenções de bloqueio de NET está ocorrendo. Investigue o motivo para a contenção de bloqueio executando um perfil de simultaneidade. |
Tipo de regra |
Aviso |
Quando você cria o perfil usando a amostragem.NET métodos de contenção de memória ou recursos, você deve coletar amostras de pelo menos 25 para disparar esta regra.
Causa
Sistema dados de desempenho coletados com os dados de criação de perfil indicam que uma taxa excessivamente alta de contenções de bloqueio ocorreu durante a execução do aplicativo. Considere a criação de perfil novamente usando a método de criação de perfil de simultaneidade para encontrar a causa da contenção.
Descrição da regra
Bloqueios são usados para proteger as seções críticas do código que deve ser executado em série por um segmento por vez em um aplicativo multithread. A Microsoft.NET Common Language Runtime (CLR) fornece um conjunto completo de sincronização e bloqueio de primitivos. Por exemplo, a linguagem C# oferece suporte a uma instrução lock (SyncLock no Visual Basic). Um aplicativo gerenciado pode chamar os métodos de monitor. Enter e Exit no namespace System. Threading adquirir e liberar um bloqueio diretamente. A.NET Framework oferece suporte a sincronização adicional e o bloqueio de primitivos, incluindo classes que oferecem suporte a exclusões mútuas, ReaderWriterLocks e semáforos. Para obter mais informações, consulte Visão geral dos primitivos de sincronização na.Guia do desenvolvedor do NET Framework no site do MSDN. A.NET Framework serem próprios em camadas sobre serviços de sincronização de nível inferiores, embutidos no sistema operacional Windows. Elas incluem objetos de seção crítica e muitos diferentes de espera e funções de sinalização de eventos. Para obter mais informações, consulte o sincronização seção do Win32 e o desenvolvimento COM o Biblioteca MSDN
Subjacente ambos o.NET Framework e objetos nativos do Windows que são usados para sincronização e bloqueio são sincronizadas de locais que devem ser alterados usando operações de memória compartilhada. Sincronizadas operações específicas de hardware instruções que operam em locais de memória compartilhada para alterar seu estado usando operações atômicas. Operações atômicas são garantidas como consistente em todos os processadores no computador. Bloqueios e WaitHandles são.NET que usa as operações interligadas automaticamente quando eles são definir ou redefinir. Pode haver outra memória compartilhada estruturas de dados em seu aplicativo que também requer que você use operações interligadas para ser atualizado de forma segura para thread. Para obter mais informações, consulte Operações sincronizadas na.Seção do NET Framework da biblioteca MSND
Sincronização e bloqueio são mecanismos usados para garantir que os aplicativos de vários segmentos executar corretamente. Cada thread de um aplicativo multithread é uma unidade de execução independente agendada de forma independente pelo sistema operacional. A contenção de bloqueio ocorre sempre que um segmento que está tentando adquirir um bloqueio foi atrasado porque o outro thread está retendo o bloqueio.
Os bloqueios são aninhados com freqüência. Aninhamento ocorre quando um thread de execução de uma seção crítica executa uma função que requer o bloqueio de outro. Alguma quantidade de aninhamento de bloqueio é inevitável. A seção crítica pode chamar um.NET Framework que depende de bloqueios para garantir que ela é thread-safe. Uma chamada de algumas seções críticas em seu aplicativo em um método de Framework também bloqueia usando um identificador de bloqueio diferente faz bloqueios aninhar. Condições aninhadas de bloqueio podem levar a problemas de desempenho são notoriamente difíceis de primeira e a correção.
Essa regra é acionado quando medidas feitas durante a execução de profiling indicam que há uma quantidade excessivamente alta de contenção de bloqueio. Contenções de bloqueio atrasar a execução de segmentos que estão aguardando para o bloqueio. Mesmo relativamente pequenas quantidades de contenção de bloqueio em testes de unidade ou em execução em hardware de extremidade inferior de testes de carga devem ser investigadas.
Observação |
---|
Quando a taxa de contenções de bloqueio relatados nos dados de criação de perfil é significativo, mas não excessivos, o DA0038: Contenções de altas taxa de bloqueio mensagem de informação que é acionada em vez desta mensagem de aviso. |
Como investigar um aviso.
Clique duas vezes na mensagem para navegar até o marcas o modo de exibição dos dados de criação de perfil. Encontrar o .Taxa de LocksAndThreads\Contention NET CLR / s coluna. Determine se existem fases específicas da execução do programa onde a contenção de bloqueio é maior do que outras fases.
Essa regra é acionado somente quando você não estiver usando a método de criação de perfil de simultaneidade. A método de criação de perfil de simultaneidade é a melhor ferramenta para usar para diagnosticar problemas de desempenho relacionados à contenção de bloqueio em seu aplicativo. Colete dados para compreender o comportamento de bloqueio do seu aplicativo de criação de perfil de simultaneidade. Isso inclui o entendimento de quais bloqueios intensamente são sustentados, quanto tempo o tempo de execução do thread está atrasado aguardando disputados bloqueios e que o código específico é envolvido. Perfis de simultaneidade coleta dados sobre todas as contenções de bloqueio, incluindo o comportamento de bloqueio de instalações do Windows nativos.NET Framework classes e outras bibliotecas de terceiros que seu aplicativo faz referência. Para obter informações sobre a concorrência perfil a partir de Visual Studio IDE, consulte Coletar dados de simultaneidade de processo e de Thread. Para obter links para informações sobre concorrência perfil a partir da linha de comando, consulte o Using the Concurrency Method to Collect Resource Contention and Thread Activity Data seção Usando métodos de criação de perfil para coletar dados de desempenho de linha de comando.