我有一个winforms应用程序,它依靠几个图书馆,我有有限的控件,例如forms.images和forms.webbrowser。零星突然内存泄漏导致我的应用崩溃。这些不是积聚的过时内存泄漏。它们是随机的,通常是不同的com例外,并且无法预测 - 有时它们在一小时后发生,有时在一天后发生。

我目前的方法至少暂时应对问题是验证第一个应用程序是否通过使用getProcessesByName()来运行。然而,这是有问题的,因为正在进行的过程有时有时会崩溃但没有关闭。我刚刚得到一个WER留言(尽管WER在计算机上关闭)。更糟糕的是,当第一个进程崩溃和内存泄漏构建时,第二个过程检查应用程序也崩溃了。然后没有任何作用,直到我手动重启整个Shabang。

1)有人知道是否有效的方法检查进程B是否正在运行,而不会对处理B崩溃的内存问题进行处理

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

谢谢!

有帮助吗?

解决方案

而不是尝试解决问题,您应该尝试首先修复它。

如果使用非托管资源的效果泄漏,我会说,而不是忽略您COM组件,捕获的那些例外,然后如果不可能弄清楚导致它们是什么可能的,则会捕获和重新初始化。

除此之外,似乎你的过程没有崩溃,而是再也没有反应了。查看 process.responding 。或监视内存使用情况并在超过给定限制时杀死它process.workingset64

其他提示

通常我会使用pskill来杀死命令行的过程。没有多少需要编写.NET服务来执行它。

然而,您可能是小型简单的过程检查应用程序失败的事实会导致我相信有问题的实际系统存在问题。

pslist&pskll

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top