Estou recebendo uma mensagem de erro que não consigo resolver. É originário do Visual Studio ou do depurador. Não tenho certeza se a condição de erro final está no VS, no depurador, no meu programa ou no banco de dados.
Este é um aplicativo do Windows. Não é um aplicativo da web.
A primeira mensagem do VS é uma caixa pop-up dizendo: "Nenhum símbolo é carregado para nenhum quadro da pilha de chamadas. O código-fonte não pode ser exibido". Quando isso é clicado, recebo: " ContextSwitchDeadlock foi detectado ", juntamente com uma longa mensagem reproduzida abaixo.
O erro surge em um loop que verifica uma DataTable. Para cada linha, ele usa um valor de chave (HIC #) da tabela como parâmetro para um SqlCommand. O comando é usado para criar um SqlDataReader que retorna uma linha. Os dados são comparados. Se um erro for detectado, uma linha será adicionada a uma segunda DataTable.
O erro parece estar relacionado ao tempo de execução do procedimento (ou seja, após 60 segundos), não ao número de erros encontrados. Eu não acho que seja um problema de memória. Nenhuma variável é declarada dentro do loop. Os únicos objetos criados são os SqlDataReaders e eles estão em Usando estruturas. Adicionar System.GC.Collect () não teve efeito.
O banco de dados é um site SqlServer no mesmo laptop.
Não há aparelhos ou gadgets sofisticados no formulário.
Não conheço nada neste processo que seja muito diferente do que fiz dezenas de vezes antes. Eu já vi o erro antes, mas nunca de forma consistente.
Alguma idéia, alguém?
Texto completo do erro: O CLR não conseguiu fazer a transição do contexto COM 0x1a0b88 para o contexto COM 0x1a0cf8 por 60 segundos. O encadeamento que possui o contexto / apartamento de destino provavelmente faz uma espera sem bombeamento ou processa uma operação de execuçã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 não responder ou o uso da memória acumular continuamente ao longo do tempo. Para evitar esse problema, todos os encadeamentos STA (Single Threaded Apartment) devem usar primitivas de espera de bombeamento (como CoWaitForMultipleHandles) e bombear rotineiramente mensagens durante operações de execução longa.