Pergunta

Estou fazendo algumas longas simulações que podem levar de algumas horas a vários dias e estou registrando as informações em arquivos. Os arquivos podem atingir tamanhos de centenas de Mb e lá dentro é apenas uma lista de números. Estou realmente preocupação com a sobrecarga que este é originário. Gostaria de perguntar se a sobrecarga de usar este método é muito grande e se não houver qualquer outro método mais eficiente de fazer o mesmo, faça o login informações.

Eu estou usando C ++ e para registrar os arquivos eu só usar os métodos comuns de fprintf. Para explicar a sobrecarga se você pode dar um exemplo prático semelhante, usando arquivos que leva este tempo sem usá-los neste momento, que vai ser idealmente.

Eu fiz alguns testes, mas eu não tenho idéia se a sobrecarga cresce linearmente com o tamanho dos arquivos. O que estou dizendo é que talvez não é o mesmo adicionar uma linha em um arquivo de um tamanho de 1Mb de um arquivo de tamanho de 1Gb. Alguém sabe como a crescer em cima com o tamanho do arquivo?.

Foi útil?

Solução

Você só precisa de alguns cálculos back-of-the-envelope, eu acho.

Vamos "centenas de Mb" ser 400MB.
Vamos "várias horas a vários dias" de 48 horas.

(400 * 1024 * 1024 bytes) / (3600 * 48 segundos) = 2427 bytes / seg

Obviamente, você pode apenas assistir seu sistema ou usar números reais para o cálculo, mas usando a estimativa acima, você está registrando cerca de 2 KB / s, o que é bastante trivial comparado com os limites médios de disco rígido.

Então, não, a sobrecarga não parece ser muito grande. E sim, há maneiras mais eficientes de fazer isso, mas você provavelmente iria gastar mais tempo e esforço que vale a pena para as economias minúsculas que você começa a menos que seus números são muito diferentes do que você disse.

Outras dicas

"Centenas de megabytes" é provavelmente irrelevante no curso de alguns dias. Centenas de gigabytes poderia muito bem ser significativo, mas provavelmente ainda não seria enorme.

Há uma maneira óbvia de descobrir a resposta para a sua aplicação exata, porém: executar uma simulação com o log ligado, e tempo. Em seguida, executá-lo (com a mesma entrada) com o registo desligado, e tempo. Compare a diferença. Idealmente, fazer isso várias vezes para contrabalançar outros distúrbios. Eu suspeito que você vai descobrir que o benefício potencial de lotes de login vastamente supera o desempenho atingido.

Você pode colocar os dados no vetor STL e fez alguns perfis em seus dados, como:
- exclui linhas repetidas;
- save únicas diferenças;
- dados de descarga depois de alguns tempo;
- selecionar dados específicos para salvar;
- etc ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top