Есть ли способ ограничить скорость чтения программы из файлов без замедления самой программы?
2 ответа
В Windows Vista и выше вы можете установить приоритет ввода / вывода процесса. Это не ограничит скорость, но даст другим процессам приоритет над вашим процессом и позволит им иметь приоритет. Для этого есть скрытые API, но кажется, что вы ищете инструмент. Когда вы устанавливаете приоритет процесса с помощью диспетчера задач на значение «Ниже нормы» или «Неактивно», приоритет ввода-вывода также падает.
Этот вопрос о suepruser имеет больше информации:
Как изменить приоритет ввода / вывода процесса или потока в Win7?
Он также ссылается на этот проект, который позволяет вам установить приоритет ввода / вывода.
Не уверен насчет аппаратных или ОС-специфичных решений ... Но очевидное выпрыгивает (простите за грубую реализацию):
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;
}
Это актуально только если вы читаете куски. Я полагаю, вы могли бы извлечь из потока и перегрузить соответствующие методы. Начинает становиться немного противным. Но это простой и быстрый обходной путь, если вы не можете найти решение более низкого уровня.