2

Есть ли способ ограничить скорость чтения программы из файлов без замедления самой программы?

2 ответа2

2

В Windows Vista и выше вы можете установить приоритет ввода / вывода процесса. Это не ограничит скорость, но даст другим процессам приоритет над вашим процессом и позволит им иметь приоритет. Для этого есть скрытые API, но кажется, что вы ищете инструмент. Когда вы устанавливаете приоритет процесса с помощью диспетчера задач на значение «Ниже нормы» или «Неактивно», приоритет ввода-вывода также падает.

Этот вопрос о suepruser имеет больше информации:

Как изменить приоритет ввода / вывода процесса или потока в Win7?

Он также ссылается на этот проект, который позволяет вам установить приоритет ввода / вывода.

http://sourceforge.net/projects/iopriority/

0

Не уверен насчет аппаратных или ОС-специфичных решений ... Но очевидное выпрыгивает (простите за грубую реализацию):

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;
}

Это актуально только если вы читаете куски. Я полагаю, вы могли бы извлечь из потока и перегрузить соответствующие методы. Начинает становиться немного противным. Но это простой и быстрый обходной путь, если вы не можете найти решение более низкого уровня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .