防止或预测内存不足异常

时间:2012-04-05 22:04:42

标签: c#

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

WebBorwser控件导致我采取这种方式,因为即使在处理附加到表单的webbrowser控件之后,内存使用量也不会减少,而且我读到的任何地方都说这是一个IE问题,我们处于他们的左右。 (虽然我注意到如果我打开IE浏览器,运行相同的网站,内存会增加,但是当我关闭标签时,内存会正常缩短....)

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

所以现在我要做的是创建一个方法,动态检查可用内存与总内存,并在情况变得至关重要时执行重启,以正确处理GC无法达到的资源,我无法以编程方式弄清楚如何销毁。

我相信我可以做到这一点,并从我离开的地方重新启动自动化,并继续循环播放该守护进程。

任何人都可以帮我弄清楚如何编码内存检查?它应该很容易。我找到了这个帖子但是我在实现它时遇到了一些麻烦而没有遇到错误...也许另一种方法会更好? How do you get total amount of RAM the computer has?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Asp.Net会在注意到可用内存不足的情况下从httpcache中删除内容,你可以通过Reflector访问框架的那一部分并了解它在那里的工作方式......