Apenas para colocar fogo na questão, eu fiz em uma máquina virtual inmutá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
- Deixe o
cleanmgr
fazer seu trabalho e anote o 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 inmutável
- Reinicie no Windows
- Faça um FOR / F ... para excluir esses arquivos em um prompt de comando do administrador (cmd) e anote o tempo (menos de cinco minutos)
Por favor, note que eu reiniciei no Linux SystemRescueCd apenas para poder listar todos os arquivos, também os que são visualizados pelo Windows e também para listar o mais rápido possível (sem verificação de acl, etc).
Observe também que, em cleanmgr
i, conta 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 botle neck (a exclusão em si só precisa de cinco minutos, mas cleanmgr
leva mais de oito horas).
O delete self pode ir tão rápido, 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 usado como disco na máquina virtual (24GiB) e tenho 64GiB de RAM e deixo para o Windows 16GiB ele não precisa usar SWAP nem PAGEFILE.SYS; Além disso, o Linux pode conter o arquivo completo na RAM (eu testei com esse arquivo na RAM e os tempos de exclusão foram muito reduzidos, mas cleanmgr
time não caiu).
Sim, se eu colocar o disco virtual totalmente na RAM, cleanmgr
tempo não cai, mas se eu manualmente excluir os arquivos, esse tempo cai um pouco (cache de gravação do Linux é ótimo quando você tem 64GiB de RAM isso.
Minha configuração para os testes:
- Anfitrião: Distribuição de 64bits do Linux sobre um hardware cujas principais partes são o AMD Deca Core 5GHz com 64GiB de RAM e um controlador Sata Raid0 com dois WD VelociRaptor HDDs (capazes de sustentar uma velocidade de gravação secundária próxima de 1GiB / se 4K gravação aleatória de 300MiB / s); custo é > dez mil euros
- Convidado: Windows 10 Home com 16GiB de RAM e um disco virtual de 24GiB
Test1: Tendo o disco virtual de 24GiB nos discos rígidos físicos
Test2: Tendo o disco virtual 24GiB na RAM do host Linux
Eu tenho medo 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 (a maior parte do tempo entre 0% e 1%, com piques de 5%, não mais)
- Uso de HDD no host Linux (perto de 0% quando
cleanmgr
estava funcionando, com picos 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 (a maior parte do tempo entre 2% e 15% quando
cleanmgr
estava funcionando, com piques de 28%)
Então, claramente, cleanmgr
está fazendo muito trabalho indetectável, talvez horas de sono? Talvez não, se é cadastro, a CPU para isso não é contada por monitores do Windows, HDD em que não é usado (registro está em RAM), etc., e cada acesso ao registro pode levar mais de um segundo. tente seu próprio programa para acessar o registro abrindo o registro e fechando-o para cada ação, em vez de deixar o HK * aberto ... é uma grande diferença.
Então, se cleanmgr
for para cada arquivo:
- Abrir registro HK *
- Consultar quaisquer necessidades e / ou fazer algumas gravações no registro
- Fechar registro HK *
Pode demorar até dois ou três segundos por operação, e se fizer uma operação por arquivo, pode levar cerca de uma hora por cada mil arquivos ... minha contagem de arquivos era um pouco mais do que 40000 arquivos, então 40000 arquivos / 8 horas está processando um arquivo a cada 1,3 segundo ... do outro lado, deletá-los em um script (depois de saber quais) demorou menos de cinco minutos, ou seja, apagando cerca de 133 por segundo. uma grande diferença.
Definitivamente cleanmgr
time não é causado pelo deletion
auto! O que mais está fazendo? Por favor M $ melhore essa velocidade!