限制程序c++的硬盘读取速度

限制程序c++的硬盘读取速度

有没有办法可以限制程序读取文件的速度,而不会减慢程序本身的速度?

答案1

在 Windows Vista 及更高版本中,您可以设置进程的 I/O 优先级。这不会限制速率,但会使其他进程优先于您的进程,并允许它们优先。有隐藏的 API 可以做到这一点,但您似乎正在寻找一个工具。当您使用任务管理器将进程优先级设置为低于正常或空闲时,I/O 优先级也会下降。

suepruser 上的这个问题有更多信息:

如何在Win7中更改进程或线程的I/O优先级?

它还链接到这个允许您设置 I/O 优先级的项目。

http://sourceforge.net/projects/iopriority/

答案2

不确定硬件或特定于操作系统的解决方案...但显而易见(原谅粗鲁的实现):

const long long maxBytesPerSec = 1048576;
static long long bytesRead = 0;
static long long secondsElapsed = 1;

istream & ReadBytesThrottled( istream & s, char * buffer, long long bytesToRead )
{
    while( (bytesRead+bytesToRead) / secondsElapsed > maxBytesPerSec ) {
        // Wait and update secondsElapsed
    }
    s.read(buffer, bytesToRead);
    if( s.good() ) bytesRead += bytesToRead;
    return s;
}

void ResetThrottle()
{
    bytesRead = 0;
    secondsElapsed = 1;
}

这只在你读取块时才有意义。我想你可以从流中派生并重载相关方法。开始有点恶心。但如果你找不到较低级别的解决方案,这是一个简单而快速的解决方法。

相关内容