limitando a velocidade de leitura do disco rígido para um programa c++

limitando a velocidade de leitura do disco rígido para um programa c++

Existe uma maneira de limitar a rapidez com que um programa pode ler arquivos sem diminuir a velocidade do próprio programa?

Responder1

No Windows Vista e superior, você pode definir a prioridade de E/S de um processo. Isso não limitará a taxa, mas dará prioridade a outros processos sobre o seu e permitirá que eles tenham precedência. Existem APIs ocultas para fazer isso, mas parece que o que você está procurando é uma ferramenta. Quando você define a prioridade do processo, usando o gerenciador de tarefas, como Abaixo do Normal ou Ocioso, a prioridade de E/S também cai.

Esta pergunta no suepruser tem mais informações:

Como alterar a prioridade de E/S de um processo ou thread no Win7?

Ele também está vinculado a este projeto que permite definir a prioridade de E/S.

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

Responder2

Não tenho certeza sobre soluções específicas de hardware ou sistema operacional... Mas o óbvio salta à tona (perdoe a implementação grosseira):

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

Isso só é relevante se você estiver lendo pedaços. Suponho que você possa derivar do fluxo e sobrecarregar os métodos relevantes. Começa a ficar um pouco eca. Mas é uma solução simples e rápida se você não conseguir encontrar uma solução de nível inferior.

informação relacionada