
有沒有辦法限製程式讀取檔案的速度而不減慢程式本身的速度?
答案1
在 Windows Vista 及更高版本中,您可以設定進程的 I/O 優先權。這不會限制速率,但會讓其他進程優先於您的進程,並允許它們優先。有隱藏的 API 可以做到這一點,但看來您正在尋找的是一個工具。當您使用工作管理員將進程優先權設定為低於正常或空閒時,I/O 優先權也會下降。
suepruser 上的這個問題有更多資訊:
它還連結到該項目,允許您設定 I/O 優先權。
答案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;
}
只有當您正在閱讀區塊時,這才有意義。我想您可以從流中派生並重載相關方法。開始有點噁心了。但如果您找不到較低階的解決方案,這是一個簡單且快速的解決方法。