Espero que alguém possa me esclarecer sobre o que poderia estar causando esse erro:
Tentativa de ler ou escrever na memória protegida. Isso geralmente indica que outras memórias estão corrompidas.
Não consigo realmente postar código porque esse erro parece ser lançado em qualquer área aleatória do aplicativo. O aplicativo será executado de 12 a 48 horas antes de gerar o erro. Às vezes, ele pára em um local aparentemente aleatório e gera o erro acima; outras vezes, o aplicativo inteiro para e uma tela com um erro informa algo como "Ocorreu um erro fatal em ... Isso pode ser um bug no CLR ou ... "algo sobre o PInvoke ou outras informações não relevantes. Quando isso acontece, todos os threads são mostrados terminados e não há informações de depuração disponíveis.
Em poucas palavras, é isso que o aplicativo faz:
É um aplicativo de servidor multiencadeado, escrito inteiramente em C #. Os clientes se conectam ao servidor via soquete. O servidor executa um "ambiente" virtual para os clientes, onde eles podem interagir entre si e com o ambiente. Consome bastante memória, mas não vejo vazamento. Consome tipicamente cerca de 1,5 GB. Não acho que esteja vazando porque o uso da memória permanece relativamente constante o tempo todo em que o aplicativo está sendo executado. Seu código constantemente em execução para manter o ambiente, mesmo que os clientes não estejam fazendo nada. Ele não usa software de terceiros ou outras APIs. Os únicos recursos externos que este aplicativo usa são conexões de soquete e conexões de banco de dados SQL. Está rodando em um servidor de 64 bits. Tentei depurar isso no VS2008 e VS2010 usando .net 2.0, 3.5 e 4.
Tentei desativar as otimizações do compilador e várias correções da Microsoft. Parece que nada resolve esse problema. Seria apreciado se alguém conhece alguma causa possível, ou algum tipo de maneira de identificar o que está causando o problema.