0

我正在寻找一种策略,该策略将检测系统何时即将耗尽内存并使用 Application.Restart(); 重新启动系统;

WebBorwser 控件导致我采用这条路线,因为即使在处理附加到表单的 webbrowser 控件之后,内存使用量也不会减少,而且我读过的所有地方都说这是一个 IE 问题,我们任由他们摆布。(虽然我确实注意到如果我打开 IE,运行相同的网站,内存会增加,但当我关闭选项卡时会适当减少。...)

我不打算转向 webkit,因为 watin 不兼容,我不打算使用 GeckoFX,因为它不支持 javascript 或 jquery 支持,我不打算使用外部浏览器实例,因为嵌入式浏览器控件是一部分我的界面设计。

因此,现在我要做的是创建一个方法,该方法可以根据总内存动态检查可用内存,并在情况变得危急时执行重新启动以正确处理 GC 无法访问的资源并且我无法以编程方式弄清楚如何销毁。

我相信我可以做到这一点并从我停止的地方重新启动我的自动化并循环打开和打开这个守护进程。

谁能帮我弄清楚如何编码内存检查?这应该很容易。我找到了这个线程,但是我在实现它而不遇到错误时遇到了一些麻烦……也许另一种方法会更好?您如何获得计算机的 RAM 总量?

多谢你们!我希望这有帮助,

4

2 回答 2

1

这没有多大意义。发生 OOM 是因为 CLR 内存管理器无法分配所需的内存卡盘。这可能是由于多种原因。在所有分配之前查看可用 RAM(这完全不相关)甚至可用 GC 内存并不能保证不存在 OOM。例如,如果您有 LOH 碎片,可用字节的总数可能会超过分配的需要,但如果 CLR 无法从空闲列表中分配单个连续的内存块,则请求仍然会失败。

于 2012-04-05T22:18:52.053 回答
0

当 Asp.Net 注意到它的可用内存不足时,它会从 httpcache 中驱逐东西,你可以通过 Reflector 进入框架的那个部分,并学习它是如何在那里完成工作的......

于 2012-04-05T22:09:55.283 回答