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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top