限製程式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;
}

只有當您正在閱讀區塊時,這才有意義。我想您可以從流中派生並重載相關方法。開始有點噁心了。但如果您找不到較低階的解決方案,這是一個簡單且快速的解決方法。

相關內容