我正在开发一个使用大量内存的大型程序。该程序非常实验性,我一直在添加和删除大块代码。有时我会添加一个过于耗费内存的例行程序,硬盘驱动器将开始颠簸,程序(以及整个系统)将放慢速度。它可以很容易地用5分钟来关闭它!
我想要的是一种避免这种情况的机制。要么是运行时程序,要么是在运行程序之前要做的事情,这可以说是“如果你运行这个程序存在硬盘抖动的风险 - 现在中止以避免减速到蜗牛的速度”。
有什么想法吗?
编辑:忘记提及,我的程序使用多个线程。
答案 0 :(得分:3)
当有多个线程或进程同时访问磁盘时,Windows XP很糟糕。这实际上是您在应用程序开始交换时遇到的情况,因为操作系统在读取其他页面时会写出一些页面。对于这个问题,Windows XP(以及Server 2003)完全是垃圾。这真是一种耻辱,因为它意味着交换几乎与这些系统上的颠簸同义。
您的选择:
请在此处查看此问题的更多详细信息:How to obtain good concurrent read performance from disk
答案 1 :(得分:3)
您可以考虑使用SetProcessWorkingSetSize。这在调试时非常有用,因为当内存耗尽时,您的应用程序会因致命异常而崩溃,而不是将您的计算机拖入颠簸状态。
http://msdn.microsoft.com/en-us/library/ms686234%28VS.85%29.aspx
类似的问题
答案 2 :(得分:2)
我不熟悉Windows编程,但在Unix下,您可以限制程序可以使用setrlimit()
的内存量。也许有类似的东西。目标是让程序在使用大量内存时中止,而不是颠簸。限制将略小于机器上的总物理内存。我估计在75%到90%之间,但是需要一些实验才能找到最佳设置。
答案 3 :(得分:1)
您的程序可能会使用一些内存管理。虽然有一些程序确实需要同时将所有内容保存在内存中,但很有可能,只要有一点远见,您就可以重新编写程序以重用或丢弃所需的大量内存。
你的程序也会运行得更快。如果您使用那么多内存,那么基本上所有内置的第一级和第二级缓存都可能溢出,这意味着CPU主要等待内存加载而不是处理代码的指令。
答案 4 :(得分:-1)
我宁愿为你的程序运行的计算机确定合理的最低要求,并且在安装过程中要么警告用户没有足够的可用内存,要么拒绝安装。
每次他启动该计划时告诉他都是荒谬的。