есть ли способ ограничить, как быстро программа может читать из файлов, не замедляя саму программу?
ограничение скорости чтения жесткого диска для программы c++
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;
}
Это только если Вы читаете кусками. Я полагаю, вы могли бы вывести из потока и перегрузить соответствующие методы. Начинает немного раздражаться. Но это простой и быстрый обходной путь, если вы не можете найти решение более низкого уровня.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]