从内存中恢复 - 在WinForms中的泄漏崩溃

问题描述:

我有一个WinForms应用程序,依靠几个库,我有限制控制,如Forms.Images和Forms.WebBrowser。零星的突然内存泄漏导致我的应用程序崩溃。这些并不是长时间内存泄漏。它们是随机的,通常是不同的COM例外,并且无法预测 - 有时会在一小时后发生,有时会在一天后发生。从内存中恢复 - 在WinForms中的泄漏崩溃

我至少暂时解决问题的方法是让另一个应用程序通过使用GetProcessesByName()验证第一个应用程序正在运行。然而,这是有问题的,因为正在进行的过程有时会崩溃但不会结束。我只是收到一条WER消息(尽管WER在计算机上关闭)。更糟糕的是,当第一个进程崩溃并且内存泄漏建立时,第二个进程检查应用程序也会崩溃。然后没有任何工作,直到我手动重新启动整个shabang。

1)有没有人知道一个有效的方法来让Process A检查Process B是否正在运行,而Process A没有受到导致Process B崩溃的内存问题? 2)如果上述不可能或者太难,任何人都知道任何可以用来确保进程在没有任何未完成WER错误的情况下运行的第三方工具,那么如果检测到WER错误,那么重新启动进程,并且可以承受最大的内存?

谢谢!

,而不是试图解决这个问题,你应该首先尝试修复它。

如果您在使用非托管资源时出现内存泄漏问题,我会说不是忽略com组件抛出的那些异常,而是捕获,然后处置并重新初始化,如果无法确定导致这些异常的原因。

除此之外,它似乎你的过程没有崩溃,而是不再响应。见Process.Responding。或者监视内存使用情况,并在超过给定限制时将其停用Process.WorkingSet64

通常我会使用pskill从命令行中终止进程。没有太多需要编写一个.net服务来做到这一点。然而,事实上,你大概小而简单的过程检查应用程序正在失败,这将导致我相信有问题的实际系统有问题。

pslist & pskll