我有一个WinForms应用程序依赖于我控制有限的几个库,例如Forms.Images和Forms.WebBrowser。零星的突然内存泄漏导致我的应用程序崩溃。这些不会造成超时的内存泄漏。它们是随机的,通常是不同的COM异常,无法预测 - 有时它们发生在一小时之后,有时一天之后。
我目前至少暂时解决问题的方法是让另一个应用程序通过使用GetProcessesByName()验证第一个应用程序是否正在运行。然而,这是有问题的,因为正在进行的过程有时会崩溃但不会关闭。我只是得到一条WER消息(尽管计算机上的WER已关闭)。更糟糕的是,当第一个进程崩溃并且内存泄漏累积时,第二个进程检查应用程序也崩溃了。然后在手动重启整个shabang之前没有任何作用。
1)是否有人知道一个有效的方法让进程A检查进程B是否在运行而没有进程A遇到导致进程B崩溃的内存问题?
2)如果上述情况不可能或太困难,是否有人知道可用于确保进程在没有任何未完成的WER错误的情况下运行的任何良好的第三方工具,如果检测到WER错误,则重新启动进程,并且可以承受最大限度的RAM?
谢谢!
答案 0 :(得分:1)
您应该首先尝试修复问题,而不是尝试解决问题。
如果您在使用非托管资源时遇到内存泄漏,我会说,如果不可能找出造成它们的原因,而不是忽略com组件引发的异常,捕获,然后处置并重新初始化。
除此之外,您的流程似乎没有崩溃,而是不再响应。见Process.Responding。或监视内存使用情况并在超过给定限制Process.WorkingSet64
时将其终止答案 1 :(得分:0)
通常我会使用pskill从命令行终止进程。不需要编写.net服务来完成它。
但是,你的小型简单流程检查应用程序失败的事实会让我相信实际系统存在问题。