
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.
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.