我时不时地发现自己做了一些相当愚蠢的事情,导致我的程序分配它可以获得的所有内存,然后分配一些内存。
过去,这种情况会导致程序因“内存不足”错误而很快死掉,但现在 Windows 会不遗余力地将这些不存在的内存提供给应用程序,而且实际上显然已经准备好这样做会自杀。当然不是字面上的意思,但它会严重缺乏可用的物理 RAM,甚至运行任务管理器也需要半小时的交换(毕竟失控的应用程序仍然在分配越来越多的内存)。
这种情况并不经常发生,但一旦发生,那就是灾难性的。我通常需要重置我的机器,有时会导致数据丢失,并且通常会带来很多不便。
您有什么实用的建议可以减轻此类错误的严重后果吗?也许进行一些注册表调整来限制允许应用程序分配的最大虚拟内存量?或者某些 CLR 标志将仅限于当前应用程序? (通常在 .NET 中我自己这样做。)
(“不要耗尽内存” and “购买更多内存”没有用——前者我无法控制,后者我已经控制了。)
每当运行有风险的应用程序时,您都可以保持命令提示符打开。然后,如果它开始失控,您不必等待任务管理器加载,只需使用:
taskkill /F /FI "MEMUSAGE ge 2000000"
这将(理论上)强制杀死任何使用超过 2GB 内存的东西。
Use taskkill /?
获取所需选项的完整列表。
编辑:更好的是,每隔几分钟将命令作为计划任务运行一次。任何开始崩溃的进程都会被自动消灭。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)