Giusto per dare fuoco alla domanda, avevo fatto su una macchina virtuale immutabile i seguenti passi:
- Avviare un SystemRescueCD e montare la partizione di Windows
- Elenca tutti i file sul disco in un file di registro (meno di un minuto)
- Riavvia su Windows
- Lascia
cleanmgr
fare il suo lavoro e prendi nota del tempo (più di otto ore)
- Riavviare su SystemRescueCD e montare la partizione di Windows
- Elenca tutti i file sul disco in un altro file di registro (meno di un minuto)
- Ripristina la macchina virtuale immutabile
- Riavvia su Windows
- Eseguire un FOR / F ... per eliminare tali file in un prompt dei comandi di amministrazione (cmd) e prendere nota del tempo (meno di cinque minuti)
Nota che ho riavviato Linux SystemRescueCd solo per essere in grado di elencare tutti i file, anche quelli cercati da Window e anche per fare tale elenco il più velocemente possibile (nessun controllo acl, ecc.).
Si noti inoltre che cleanmgr
conto solo il tempo trascorso al termine della ricerca (la ricerca stessa ha richiesto anche più di sei ore).
Quindi eliminare i file non è il collo del botle (l'eliminazione stessa richiede solo cinque minuti ma cleanmgr
richiede più di otto ore).
L'eliminazione stessa può andare così veloce poiché l'host è un Linux, che la velocità è causata solo dal fatto che Linux memorizza nella cache tutte le scritture nel file di dimensioni fisse che viene utilizzato come disco sulla macchina virtuale (24GiB) e poiché ho 64GiB di RAM e ho lasciato a Windows 16GiB non è necessario utilizzare SWAP né PAGEFILE.SYS; inoltre, Linux può contenere l'intero file su RAM (ho testato con quel file su RAM e i tempi di eliminazione vanno molto, ma il cleanmgr
tempo non diminuisce).
Sì, se metto il disco virtuale totalmente su RAM, il cleanmgr
tempo non diminuisce, ma se elimino manualmente i file, quel tempo si riduce solo un po '(la cache di scrittura di Linux è grande quando hai 64GiB di RAM).
La mia configurazione per i test:
- Host: distro Linux a 64 bit su un hardware le cui parti principali sono AMD Deca Core 5GHz con 64GiB di RAM e un controller Sata Raid0 con due HDD WD VelociRaptor (in grado di sostenere una velocità di scrittura secuential combinata di circa 1GiB / se una scrittura casuale 4K di 300MiB / s); il costo è> diecimila euro
- Ospite: Windows 10 Home con 16GiB di RAM e un disco virtuale di 24GiB
Test1: Avere il disco virtuale 24GiB sui dischi rigidi fisici Test2: Avere il disco virtuale 24GiB sulla RAM dell'host Linux
Temo che cleanmgr
stia facendo qualcosa nel registro di Windows per ogni file che elimina (l'accesso al registro è molto basso).
Monitor che ho avuto:
- Utilizzo della CPU sull'host Linux e sul guest Windows (il più delle volte tra lo 0% e l'1%, con picchi del 5%, non di più)
- Utilizzo dell'HDD sull'host Linux (vicino allo 0% quando
cleanmgr
funzionava, con picchi del 2%), la cache del disco Linux è davvero eccezionale evitando che venga inviato al disco reale
- Utilizzo dell'HDD sul guest Windows (il più delle volte tra il 2% e il 15% quando
cleanmgr
funzionava, con picche del 28%)
Quindi chiaramente cleanmgr
sta facendo un sacco di lavoro non rilevabile, forse i periodi di sonno? Forse no, se si sta accedendo al registro, la CPU non viene conteggiata dai monitor di Windows, l'HDD non utilizzato (il registro è su RAM), ecc. E ogni accesso al registro può richiedere più di un secondo. prova il tuo programma per accedere al registro aprendo il registro e chiudendolo per ogni azione, anziché lasciare che l'HK * sia aperto ... è una grande differenza.
Quindi se lo cleanmgr
fa per ogni file:
- Apri registro HK *
- Consultare qualunque necessità e / o scrivere sul registro
- Chiudi registro HK *
Possono essere necessari fino a due o tre secondi per operazione e, se esegue un'operazione per file, può richiedere quasi un'ora per ogni mille file ... il mio conteggio dei file era poco più di 40000 file, quindi 40000 file / 8 ore stanno elaborando un file ogni 1,3 secondi ... dall'altro lato, eliminarli su uno script (dopo aver saputo quali) hanno richiesto meno di cinque minuti, ovvero circa 133 al secondo ... un hufe differenza.
Quindi sicuramente il cleanmgr
tempo non è causato dal deletion
sé stesso! Cos'altro sta facendo? Per favore M $ migliora quella velocità!