Um die Frage in Brand zu setzen, hatte ich die nächsten Schritte auf einer unveränderlichen virtuellen Maschine ausgeführt:
- Booten Sie eine SystemRescueCD und hängen Sie die Windows-Partition ein
- Alle Dateien auf der Festplatte in einer Protokolldatei auflisten (weniger als eine Minute)
- Starten Sie Windows neu
- Lassen Sie es
cleanmgr
machen und notieren Sie sich die Zeit (mehr als acht Stunden)
- Starten Sie auf SystemRescueCD neu und hängen Sie die Windows-Partition ein
- Alle Dateien auf der Festplatte in einer anderen Protokolldatei auflisten (weniger als eine Minute)
- Setzen Sie die inmutable virtuelle Maschine zurück
- Starten Sie Windows neu
- Führen Sie ein FOR / F aus, um solche Dateien in einer Admin-Eingabeaufforderung (cmd) zu löschen, und notieren Sie sich die Zeit (weniger als fünf Minuten).
Bitte beachten Sie, dass ich auf Linux SystemRescueCd neu gestartet habe, um alle Dateien aufzulisten, auch die, die von Windows angezeigt wurden, und um eine solche Auflistung so schnell wie möglich durchzuführen (keine Acl-Prüfung usw.).
Beachten Sie auch, dass cleanmgr
ich nur die Zeit zähle, die nach dem Ende der Suche verstrichen ist (die Suche selbst dauerte ebenfalls mehr als sechs Stunden).
Das Löschen der Dateien ist also kein Problem (das Löschen selbst cleanmgr
dauert nur fünf Minuten, dauert aber mehr als acht Stunden).
Das Löschen selbst kann so schnell gehen, da der Host ein Linux ist, dass die Geschwindigkeit nur dadurch verursacht wird, dass Linux alle Schreibvorgänge in die Datei mit fester Größe zwischenspeichert, die als Festplatte auf der virtuellen Maschine (24 GB) verwendet wird, und da ich 64 GB habe RAM und ich lasse zu dem Windows 16GiB, das es weder PAGEFILE.SYS noch SWAP verwenden muss; Außerdem kann Linux die gesamte Datei im RAM speichern (ich habe mit dieser Datei im RAM getestet und die Löschzeiten sind sehr hoch, aber die cleanmgr
Zeit vergeht nicht).
Ja, wenn ich die virtuelle Festplatte vollständig in den Arbeitsspeicher cleanmgr
stelle, sinkt die Zeit nicht, aber wenn ich die Dateien manuell lösche, sinkt die Zeit nur geringfügig (Linux-Schreibcache ist großartig, wenn Sie über 64 GB Arbeitsspeicher verfügen).
Meine Konfiguration für die Tests:
- Host: Linux 64-Bit-Distribution über eine Hardware, deren Hauptbestandteile AMD Deca Core 5GHz mit 64GiB RAM und ein Sata Raid0-Controller mit zwei WD VelociRaptor HDDs sind (die eine kombinierte sekutive Schreibgeschwindigkeit von nahezu 1GiB / s und ein zufälliges Schreiben von 4K unterstützen können) 300MiB / s); Kosten sind> zehntausend Euro
- Gast: Windows 10 Home mit 16 GB RAM und einer virtuellen Festplatte mit 24 GB
Test1: Die virtuelle 24-GB-Festplatte befindet sich auf den physischen Festplatten. Test2: Die virtuelle 24-GB-Festplatte befindet sich auf dem Linux-Host-RAM
Ich befürchte, dass cleanmgr
die Windows-Registrierung für jede gelöschte Datei geändert wird (der Zugriff auf die Registrierung ist sehr gering).
Monitore, die ich hatte:
- CPU-Auslastung auf dem Linux-Host und auf dem Windows-Gast (meist zwischen 0% und 1%, mit Pikes von 5%, nicht mehr)
- Die Festplattenauslastung auf dem Linux-Host (fast 0%, wenn gearbeitet
cleanmgr
wurde, mit Spitzen von 2%), der Linux-Festplatten-Cache ist wirklich großartig, um zu vermeiden, dass Daten an die reale Festplatte gesendet werden
- Festplattenauslastung auf dem Windows-Gast (die meiste Zeit zwischen 2% und 15%, wenn gearbeitet
cleanmgr
wurde, mit Hechten von 28%)
Ist es also klar cleanmgr
, dass Sie eine Menge nicht nachweisbarer Arbeit verrichten, vielleicht Schlafzeiten? Möglicherweise nicht, wenn es sich um eine zugreifende Registrierung handelt, die CPU für diese nicht von Windows-Monitoren gezählt wird, die Festplatte nicht verwendet wird (die Registrierung befindet sich im RAM) usw. Jeder Zugriff auf die Registrierung kann mehr als eine Sekunde dauern. versuchen Sie Ihr eigenes Programm, um auf die Registrierung zuzugreifen, indem Sie die Registrierung öffnen und für jede Aktion schließen, anstatt die HK * öffnen zu lassen ... das ist ein großer Unterschied.
Also wenn cleanmgr
ja für jede Datei:
- Offene Registrierung HK *
- Konsultieren Sie die Anforderungen und / oder führen Sie einige Schreibvorgänge in der Registrierung durch
- Registry schließen HK *
Es kann bis zu zwei oder drei Sekunden pro Vorgang dauern, und wenn es einen Vorgang pro Datei ausführt, kann es fast eine Stunde pro tausend Dateien dauern ... Meine Anzahl von Dateien betrug nur etwas mehr als 40000 Dateien. 40000 Dateien / 8 Stunden verarbeiten also jede 1,3 Sekunden eine Datei ... auf der anderen Seite dauerte das Löschen in einem Skript (nachdem bekannt war, welche) weniger als fünf Minuten, was ungefähr 133 pro Sekunde entspricht ... eine Hufe Unterschied.
cleanmgr
Zeit wird also definitiv nicht vom deletion
Es-Selbst verursacht! Was macht es sonst noch? Bitte verbessern Sie diese Geschwindigkeit!