ограничение скорости чтения жесткого диска для программы c++

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

23
задан ᔕᖺᘎᕊ
19.04.2023 23:29 Количество просмотров материала 2687
Распечатать страницу

2 ответа

в Windows Vista и выше можно задать приоритет ввода-вывода процесса. Это не будет ограничивать скорость, но даст другим процессам приоритет над вашим процессом и позволит им иметь приоритет. Для этого существуют скрытые API-интерфейсы, но кажется, что вы ищете инструмент. При установке приоритета процесса с помощью Диспетчера задач ниже обычного или простоя приоритет ввода-вывода также снижается.

этот вопрос на suepruser имеет более подробную информацию:

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

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

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

2
отвечен kichik 2023-04-21 07:17

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

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

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

0
отвечен paddy 2023-04-21 09:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх