
프로그램 자체의 속도를 늦추지 않고 프로그램이 파일에서 읽을 수 있는 속도를 제한하는 방법이 있습니까?
답변1
Windows Vista 이상에서는 프로세스의 I/O 우선순위를 설정할 수 있습니다. 이렇게 하면 속도가 제한되지 않지만 다른 프로세스가 사용자 프로세스보다 우선순위를 부여하고 우선순위를 가질 수 있습니다. 이를 수행하는 숨겨진 API가 있지만 당신이 찾고 있는 것은 도구인 것 같습니다. 작업 관리자를 사용하여 프로세스 우선 순위를 보통 이하 또는 유휴로 설정하면 I/O 우선 순위도 떨어집니다.
suepruser에 대한 이 질문에는 더 많은 정보가 있습니다.
Win7에서 프로세스나 스레드의 I/O 우선순위를 어떻게 변경합니까?
또한 I/O 우선순위를 설정할 수 있는 이 프로젝트에 대한 링크도 제공됩니다.
답변2
하드웨어나 OS별 솔루션은 확실하지 않습니다. 하지만 분명한 점은 다음과 같습니다(조잡한 구현은 용서하세요).
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;
}
이는 청크를 읽는 경우에만 관련됩니다. 스트림에서 파생하여 관련 메서드를 오버로드할 수 있다고 가정합니다. 조금 엉뚱해지기 시작합니다. 그러나 하위 수준 솔루션을 찾을 수 없는 경우 간단하고 빠른 해결 방법입니다.