0

我有一个 WinForms 应用程序,它依赖于几个我控制有限的库,例如 Forms.Images 和 Forms.WebBrowser。零星的突然内存泄漏导致我的应用程序崩溃。这些不是随着时间的推移而累积的内存泄漏。它们是随机的,通常是不同的 COM 异常,无法预测——有时它们会在一小时后发生,有时会在一天后发生。

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

1) 有没有人知道让进程 A 检查进程 B 是否正在运行而不让进程 A 遇到导致进程 B 崩溃的内存问题的有效方法?

2)如果上述方法不可行或太难,是否有人知道任何好的第三方工具可用于确保进程在没有任何未解决的 WER 错误的情况下运行,如果检测到 WER 故障则重新启动进程,并且可以承受最大的RAM?

谢谢!

4

2 回答 2

1

与其尝试解决问题,不如先尝试解决它。

如果您在使用非托管资源时预计内存泄漏,我会说与其忽略 com 组件抛出的那些异常,不如捕获,然后处理并重新初始化,如果无法弄清楚是什么导致了它们。

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

于 2012-03-12T15:13:07.840 回答
0

通常我会使用 pskill 从命令行终止进程。无需编写 .net 服务即可。

但是,您可能很小且简单的流程检查应用程序正在故障转移这一事实会让我相信实际系统存在问题。

pslist 和 pskll

于 2012-03-12T14:09:17.340 回答