我正在以正常优先级运行用户模式程序。我的程序正在搜索 NP 问题,因此占用了大量内存,最终出现在交换文件中。

然后我的鼠标冻结了,任务管理器花了很长时间才打开并让我结束该进程。

我想知道的是如何阻止我的 Windows 操作系统完全锁定,即使我的 2 个核心中只使用了 1 个。

编辑:感谢您的回复。

我知道让它使用更少的内存会有所帮助,但整个操作系统应该锁定对我来说没有意义。

有帮助吗?

解决方案

问题是当另一个程序(例如explorer.exe)即将执行,它的所有代码和内存都已被换出。为了给其他程序腾出空间,Windows 必须首先将程序正在使用的数据写入磁盘,然后加载其他程序的内存。其他程序中执行的每个新代码页都需要磁盘访问,导致其运行缓慢。

我不知道你的程序的访问模式,但我猜它会以随机的方式大量接触它的所有内存页面,这使得问题变得更糟,因为一旦 Windows 从你的程序中逐出内存页面,就会突然当您再次需要它时,Windows 必须找到其他页面来提供相同的处理。

要为其他进程提供更多内存,您可以使用 设置进程工作设置大小 减少程序可能使用的最大 RAM 量。当然,这会让你的程序运行得更慢,因为它必须进行更多的交换。

您可以尝试的另一种选择是向系统添加更多驱动器,并将交换文件分布在这些驱动器上。您可能有双核 CPU,但只有一个驱动器。将交换文件分布在多个驱动器上允许 Windows 平衡它们之间的工作(尽管我没有第一手经验来了解它的效果如何)。

其他提示

明显的答案是“使用较少的内存”。当应用程序使用了所有的 可用内存,操作系统有页面任务管理器(等)进行以腾出空间给你的应用程序。当您切换程序时,OS到其他程序回到页面(在需要时)。 磁盘读取比内存读取速度较慢,所以一切都似乎是 要慢得多。

如果你想避免这种情况,有您的应用程序管理它自己的内存,或 使用比蛮力更好的算法。 (有遗传 算法,模拟退火,等等。)

我不认为有从是一个编程的回答这个问题,除了“重组你的应用程序使用较少的内存。”交换文件的问题是很可能是由于在访问磁盘,特别是如果你使用IDE HDD或高度分散的交换文件的瓶颈。

这是一个有点极端,但你总是可以最大限度地减少您的交换文件,所以你不必所有的磁盘thashing,和你的程序是不允许分配多少虚拟内存。在控制面板/高级/高级选项/ Perfromance /虚拟内存,设置页面文件,以自定义大小和输入2MB的值(最小允许在XP)。当分配失败时,你应该得到一个异常,并能够退出优雅。这并不完全解决您的问题,只是其加速;)

值得考虑的另一件事是,如果你是32位ONA平台,移植到64位系统,并得到一个方块,更可寻址内存。

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