Apenas para colocar fogo na questão, eu havia feito em uma máquina virtual imutável os próximos passos:
- Inicialize um SystemRescueCD e monte a partição do Windows
- Listar todos os arquivos no disco em um arquivo de log (menos de um minuto)
- Reinicie no Windows
- Vamos
cleanmgr
fazer o seu trabalho e tomar nota do tempo (mais de oito horas)
- Reinicie no SystemRescueCD e monte a partição do Windows
- Listar todos os arquivos no disco para outro arquivo de log (menos de um minuto)
- Redefinir a máquina virtual imutável
- Reinicie no Windows
- Execute um FOR / F ... para excluir esses arquivos em um prompt de comando do administrador (cmd) e anote o tempo (menos de cinco minutos)
Observe que eu reiniciei no Linux SystemRescueCd apenas para poder listar todos os arquivos, também os que foram vistos pelo Windows, e também para fazer essa listagem o mais rápido possível (sem verificação de ACL, etc.).
Observe também que cleanmgr
só conto apenas o tempo após o término da pesquisa (a pesquisa em si também leva mais de seis horas).
Portanto, excluir os arquivos não é o gargalo (a exclusão em si só precisa de cinco minutos, mas cleanmgr
leva mais de oito horas).
A exclusão por si só pode ser tão rápida, já que o host é um Linux, que a velocidade é causada apenas porque o Linux armazena em cache todas as gravações no arquivo de tamanho fixo que é usado como disco na máquina virtual (24GiB) e desde que eu tenha 64GiB de RAM e eu deixo para o Windows 16GiB ele não precisa usar SWAP nem PAGEFILE.SYS; Além disso, o Linux pode armazenar o arquivo completo na RAM (eu testei com esse arquivo na RAM e os tempos de exclusão são muitos, mas o cleanmgr
tempo não diminui).
Sim, se eu colocar o disco virtual totalmente na RAM, o cleanmgr
tempo não diminui, mas se eu excluir manualmente os arquivos, esse tempo diminui um pouco (o cache de gravação do Linux é ótimo quando você tem 64GiB de RAM).
Minha configuração para os testes:
- Host: Linux 64bits distribui sobre um hardware cujas partes principais são AMD Deca Core 5GHz com 64GiB de RAM e um controlador Sata Raid0 com dois HDD VelociRaptor WD (capazes de sustentar uma velocidade de gravação secuencial combinada próxima de 1GiB / se uma gravação aleatória de 4K 300MiB / s); custo é> dez mil euros
- Convidado: Windows 10 Home com 16GiB de ram e um disco virtual de 24GiB
Teste1: Tendo o disco virtual de 24GiB nos discos rígidos físicos Teste2: Tendo o disco virtual de 24GiB na RAM do host do Linux
Receio que cleanmgr
esteja fazendo algo no registro do Windows por cada arquivo excluído (acessar o registro é muito baixo).
Monitores que eu tinha:
- Uso da CPU no host Linux e no Windows Guest (na maioria das vezes entre 0% e 1%, com piques de 5%, não mais)
- Uso de HDD no host Linux (quase 0% quando
cleanmgr
estava trabalhando, com piques de 2%), o cache de disco do Linux é realmente ótimo, evitando que o dato seja enviado para o disco real
- Uso de HDD no convidado do Windows (na maioria das vezes entre 2% e 15% quando
cleanmgr
estava trabalhando, com picos de 28%)
Tão claramente cleanmgr
está fazendo muito trabalho indetectável, talvez horas de sono? Talvez não, se estiver acessando o registro, a CPU não é contada pelos monitores do Windows, o HDD não é usado (o registro está na RAM), etc., e cada acesso ao registro pode levar mais de um segundo. tente seu próprio programa para acessar o registro abrindo-o e fechando-o a cada ação versus deixando o HK * aberto ... é uma grande diferença.
Então, se cleanmgr
faz para cada arquivo:
- Registro aberto HK *
- Consulte as necessidades e / ou faça algumas gravações no registro
- Fechar registro HK *
Pode levar até dois ou três segundos por operação e, se fizer uma operação por arquivo, pode demorar cerca de uma hora a cada mil arquivos ... minha contagem de arquivos foi um pouco mais do que 40000 arquivos, então 40000 arquivos / 8 horas estão processando um arquivo a cada 1,3 segundos ... do outro lado, excluí-los em um script (depois de saber quais) leva menos de cinco minutos, ou seja, excluir 133 por segundo ... um hufe diferença.
Então, definitivamente, o cleanmgr
tempo não é causado pelo deletion
próprio eu! O que mais está fazendo? Por favor, M $ melhore essa velocidade!