Pregunta

Tengo una aplicación de WinForms que se basa en varias bibliotecas sobre las cuales tengo un control limitado, como los siguientes formuladores y los formuladores. Las fugas esporádicas de memoria repentina hacen que mi aplicación se bloquee. Estas no son fugas de memoria con exceso de tiempo que se acumulan. Son aleatorios, a menudo diferentes excepciones de com y son imposibles de predecir, a veces suceden después de una hora, a veces después de un día.

Mi metodología actual para al menos temporalmente a hacer frente al problema es tener que otra aplicación verifique que la primera se está ejecutando utilizando GetProcessSisByName (). Sin embargo, esto es problemático porque el proceso en curso a veces se estrella, pero no se cierra. Acabo de obtener un mensaje Wer (a pesar del hecho de que WER se apaga en la computadora). Lo que es peor es que cuando el primer proceso se bloquea y la pérdida de memoria se acumula, la segunda aplicación de verificación de procesos también se bloquea. Y entonces nada funciona hasta que reinicie manualmente a todo Shabang.

1) ¿Alguien sabe una forma efectiva de procesar un cheque si el proceso B se está ejecutando sin tener un proceso a sometido a los problemas de memoria que hicieron que el proceso B?

2) Si lo anterior no es posible, o demasiado difícil, ¿alguna persona conoce a otras herramientas de terceros que se pueden usar para garantizar que los procesos se ejecuten sin ningún error más destacado, que reinicie los procesos si se detectan fallas, ¿Y eso puede soportar al máximo RAM?

¡Gracias!

¿Fue útil?

Solución

En lugar de tratar de solucionar el problema, debe intentar arreglarlo primero.

Si está expulsando las fugas de la memoria mientras usa los recursos no administrados, diría en lugar de ignorar esas excepciones lanzadas por los componentes, capturar, luego disponer y reinicializar si no es posible imaginar lo que los está causando.

Además, parece que su proceso no se estrelló, sino que ya no responde.Consultela Process.Respondering .O monitorear el uso de la memoria y matarlo cuando exceda un límite dado >Proceso.workingset64

Otros consejos

Normalmente usaría PSKILL para matar el proceso de la línea de comandos.No es mucho necesario escribir un servicio .NET para hacerlo.

Sin embargo, el hecho de que su aplicación de verificación de procesos presumiblemente pequeña y sencilla está fallando, me llevaría a creer que hay algo mal con el sistema real en cuestión.

PSLIST & AMP;pskll

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top