O arquivo em lote do Windows exclui e copia arquivos muito rápido - deve demorar mais de 15 segundos, leva 1 segundo. Por quê?

0

Eu escrevi um script que verifica se existe uma pasta e, em caso afirmativo, a esvazia. em seguida, aguarda 5 segundos e, em seguida, passa a recopiar novos arquivos (ou talvez os mesmos) de volta para a pasta.

Quando as pastas ainda não existem, levará de 15 a 20 segundos para copiar os arquivos. mas quando as pastas já existem, eu posso vê-las sendo esvaziadas, vejo a espera, depois vejo os comandos de cópia em menos de um segundo. E os arquivos aparecem na lista.

Alguém pode me explicar isso? Quase parece que a cópia está realmente olhando para ver se o arquivo HAD existia, e se assim for, se fosse de alguma forma idêntico, ele apenas restaura o arquivo em vez de copiá-lo novamente.

Eu não testei a teoria da "restauração", mas queria saber se isso era mesmo provável (é assustador de qualquer forma).

Eu adicionei a pausa de 5 segundos pensando que talvez a unidade precisasse de tempo para se estabilizar.

Obrigado antecipadamente.

Exemplo de script:

@echo off

if exist c:\some\folder erase /q c:\some\folder
erase /q C:\another\folder\file*.exe
ping -n 6 -w 1000 127.0.0.1 > nul

copy /y some\folder\sample.exe c:\some\folder\sample.exe
copy /y another\folder\file001.exe c:\some\folder\file001.exe

torne seus arquivos de teste grandes, então eles demoram para serem copiados e você verá o que quero dizer.

    
por jnewman 31.07.2015 / 03:25

1 resposta

2

Parece que você está testemunhando o cache do sistema de arquivos fazendo seu trabalho.

Antes de mais nada, quando você copia um arquivo, o computador deve ler esse arquivo na memória antes de poder escrevê-lo de volta na cópia. A leitura desse arquivo representa um custo de tempo, portanto, a cópia na memória é mantida no cache, caso você precise dela novamente. Como se você abrisse o arquivo que acabou de copiar ou copie em outro lugar. O SO não precisa perder tempo lendo-o do disco novamente.

Em segundo lugar, o bolo é uma mentira. Quando um arquivo é "gravado", ele não vai para o disco. Ele vai, em vez disso, para um buffer de memória que, em seguida, é comprometido com o disco em algum momento posterior (geralmente imediatamente, mas não necessariamente - depende de quão ocupado o disco está). De qualquer forma, o sistema operacional informa que o arquivo terminou de ser copiado quando na verdade não foi copiado.

Tanto o cache de leitura quanto o buffer de gravação são técnicas de otimização que todos os sistemas operacionais modernos usam. No seu caso (assumindo que nada deu errado e os arquivos são idênticos), seu script está atingindo um ponto ideal. O (s) arquivo (s) simplesmente foi copiado de um bloco de memória cache para outro bloco de memória buffer e é por isso que não demorou muito.

Por acaso ... é por isso que você nunca deve desligar um computador sem desligá-lo corretamente ou remover uma unidade flash sem desmontá-lo. Parte desse processo é comprometer o cache de gravação no disco.

    
por 31.07.2015 / 05:42