Visual Studio 2008 contextwitchdeadlock com log4net e Nibernate
-
27-09-2019 - |
Pergunta
Estou enfrentando um bug extremamente estranho aqui e não tenho certeza se estou seguindo o caminho certo para resolvê -lo ou até como resolvê -lo.
Aqui está o problema que estou enfrentando: começo a depuração de um aplicativo WPF que usa log4net, Nibernate e Linq para Nibernate, e quando tento obter uma entidade do banco de dados meu aplicativo e às vezes vs pendurar por muito tempo, e depois Um tempo, uma caixa de diálogo de exceção se abre mostrando uma mensagem que contém as seguintes informações em um MDA de contexto de coxtwitchdeadlock:
O CLR não conseguiu fazer a transição do contexto COM 0x34fc1a0 para o contexto COM 0x34FC258 por 60 segundos. O segmento que possui o contexto/apartamento de destino provavelmente está fazendo uma espera sem bombeamento ou processando uma operação muito longa sem bombear mensagens do Windows. Essa situação geralmente tem um impacto negativo no desempenho e pode até levar o aplicativo a se tornar um uso não responsivo ou de memória se acumulando continuamente ao longo do tempo. Para evitar isso
Copiei os arquivos de código para um novo projeto e excluí o projeto antigo para ver se eu poderia fazer essa mensagem desaparecer, pensando que ela tinha algo a ver com minha configuração. Comecei a adicionar poucas coisas de cada vez para ver o que estava causando e, quando incluí o código de configuração do log4net, o bug apareceu novamente. Primeiro, incluí -o através da configuração do Código de AssemblyInfo e do Código Posterior na inicialização do aplicativo, e absolutamente nada mudou :(
Então, aqui estão minhas descobertas:
- Isso só acontece quando estou usando o log4net.
- Isso acontece quando o Nibernate carrega uma entidade do banco de dados (carregamento preguiçoso).
Não sei qual pode ser a fonte desse bug. Isso só acontece ao depurar no Visual Studio. Tentei seguir as etapas na seção "MDAs de habilitação e desativação" da página seguinte: http://msdn.microsoft.com/en-us/library/d21c150d.aspx, mas isso também não funciona, o VS ainda está pendurado e seu uso de memória aumenta.
Quando eu administro o programa normalmente, nada disso acontece, então tenho certeza de que não é uma situação de impasse, como sugere essa pergunta: Contextwitchdeadlock (Eu também tentei as soluções postadas lá).
Por isso, decidi desativar o log4net e ativá -lo novamente ao implantar meu aplicativo.
Estou postando essa pergunta para descobrir se alguém enfrentou esse bug ou se alguém tem algumas sugestões sobre como resolvê -lo. Finalmente, pode ajudar alguém a enfrentar esse mesmo problema.
Desde já, obrigado,
Jorge Vargas.
Solução
Ao usar o Debupappender, todas as entidades nos bancos de dados são carregadas e todos os seus dados gravados na saída de depuração. Isso estava causando o MDA do ContextWitchDeadlock, pois demorou mais de 60 segundos para correr.
Desativar o Debupappender resolveu meu problema.
Obrigado a Mauricio Scheffer pela dica.