Pergunta

Eu tenho um aplicativo WinForms que está confiando em várias bibliotecas sobre as quais eu tenho controle limitado, como formulários e formulários .Webbrowser. Vazamentos súbitos esporádicos de memória fazem com que minha aplicação seja travada. Estes não são vazamentos de memória excessiva que se acumulam. Eles são aleatórios, muitas vezes diferentes exceções e são impossíveis de prever - às vezes eles acontecem depois de uma hora, às vezes depois de um dia.

Minha metodologia atual para pelo menos temporariamente lidar com o problema é ter outro aplicativo Verifique se o primeiro está sendo executado usando o GetProcessesByName (). No entanto, isso é problemático porque o processo contínuo às vezes falha, mas não fecha. Eu só recebo uma mensagem de WER (apesar do fato de que Wer é desligado no computador). O pior é que, quando o primeiro processo falha e o vazamento de memória se acumula, o segundo aplicativo de verificação de processo também falha. E então nada funciona até que eu reinicie manualmente todo o Shabang.

1) Alguém conhece uma maneira eficaz de ter um processo de verificação se o processo B está sendo executado sem ter processado um problema de memória que tornou o processo B.

2) Se o acima for possível, ou muito difícil, alguém conhece quaisquer boas ferramentas de terceiros que podem ser usadas para garantir que os processos estejam em execução sem quaisquer erros de WER, que reinicie os falhas forem detectados, e isso pode suportar o RAM no máximo?

Obrigado!

Foi útil?

Solução

Em vez de tentar contornar o problema, você deve tentar consertá-lo primeiro.

Se você é vazamentos de memória de expectação enquanto estiver usando recursos não gerenciados, eu diria em vez de ignorar essas exceções lançadas por seus componentes, capturas, então descarte e reinicialize se não for possível descobrir o que está causando.

Ao lado disso, parece que seu processo não falha, mas não é mais responsivo.Veja Process.Responder .Ou monitorar o uso de memória e matá-lo quando exceder um determinado limite Processo.Workingset64

Outras dicas

Normalmente eu usaria pskill para matar o processo da linha de comando.Não precisa escrever um serviço .NET para fazer isso.

No entanto, o fato de que seu aplicativo de verificação de processo presumivelmente pequeno e simples está falhando para me levar a acreditar que há algo errado com o sistema real em questão.

PSLIST & AMP;pskll

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