Solo para encender la pregunta, había hecho en una máquina virtual inmutable los siguientes pasos:
- Inicie un SystemRescueCD y monte la partición de Windows
- Liste todos los archivos en el disco en un archivo de registro (menos de un minuto)
- Reiniciar en Windows
- Vamos a
cleanmgr
hacer su trabajo y tomar nota de la hora (más de ocho horas)
- Reinicie en SystemRescueCD y monte la partición de Windows
- Listar todos los archivos en el disco a otro archivo de registro (menos de un minuto)
- Restablecer la máquina virtual inmutable
- Reiniciar en Windows
- Haga un FOR / F ... para eliminar dichos archivos en un símbolo del sistema de administración (cmd) y tome nota del tiempo (menos de cinco minutos)
Tenga en cuenta que reinicié en Linux SystemRescueCd solo para poder enumerar todos los archivos, también los que Windows buscó y también para hacer esa lista lo más rápido posible (sin verificación de acl, etc.).
También tenga en cuenta que cleanmgr
solo cuento el tiempo después de que finaliza la búsqueda (la búsqueda en sí también lleva más de seis horas).
Por lo tanto, eliminar los archivos no es el cuello de la botella (la eliminación en sí misma solo necesita cinco minutos, pero cleanmgr
lleva más de ocho horas).
La eliminación en sí misma puede ir tan rápido ya que el host es un Linux, que la velocidad se debe a que Linux almacena en caché todas las escrituras en el archivo de tamaño fijo que se utiliza como disco en la máquina virtual (24GiB), y dado que tengo 64GiB de RAM y dejo que Windows 16GiB no necesite usar SWAP ni PAGEFILE.SYS; Además, Linux puede mantener el archivo completo en la RAM (lo probé con ese archivo en la RAM y los tiempos de eliminación se realizan mucho, pero el cleanmgr
tiempo no se cae).
Sí, si pongo el disco virtual totalmente en RAM, el cleanmgr
tiempo no se reduce, pero si elimino los archivos, ese tiempo se reduce un poco (el caché de escritura de Linux es excelente cuando tienes 64GiB de RAM).
Mi configuración para las pruebas:
- Host: distribución de 64 bits de Linux sobre un hardware cuyas partes principales son AMD Deca Core 5GHz con 64GiB de RAM y un controlador Sata Raid0 con dos discos duros WD VelociRaptor (capaces de mantener una velocidad de escritura secuencial combinada de cerca de 1GiB / sy una escritura aleatoria de 4K 300MiB / s); el costo es> diez mil euros
- Invitado: Windows 10 Home con 16GiB de RAM y un disco virtual de 24GiB
Prueba1: Tener el disco virtual de 24GiB en los discos duros físicos Prueba2: Tener el disco virtual de 24GiB en la RAM del host Linux
Me temo que cleanmgr
está haciendo algo en el registro de Windows por cada archivo que elimina (el acceso al registro es muy bajo).
Monitores que tuve:
- Uso de CPU en el host de Linux y en el Guest de Windows (la mayoría del tiempo entre 0% y 1%, con picos del 5%, no más)
- El uso de HDD en el host de Linux (cerca del 0% cuando
cleanmgr
funcionaba, con picos del 2%), el caché de disco de Linux es realmente excelente para evitar que se envíe el dato al disco real
- Uso de HDD en el invitado de Windows (la mayoría del tiempo entre 2% y 15% cuando
cleanmgr
estaba trabajando, con picos del 28%)
Claramente, ¿ cleanmgr
está haciendo mucho trabajo indetectable, tal vez horas de sueño? Tal vez no, si está accediendo al registro, la CPU para eso no es contada por los monitores de Windows, el HDD que no se usa (el registro está en la RAM), etc., y cada acceso al registro puede tomar más de un segundo. intente su propio programa para acceder al registro abriendo el registro y cerrándolo por cada acción en lugar de dejar que HK * se abra ... es una gran diferencia.
Entonces, si lo cleanmgr
hace para cada archivo:
- Registro abierto HK *
- Consulte cualquier necesidad y / o haga algunas escrituras en el registro
- Cerrar registro HK *
Puede tomar hasta dos o tres segundos por operación, y si hace una operación por archivo, puede tomar cerca de una hora por cada mil archivos ... mi recuento de archivos fue un poco más de 40000 archivos, así que 40000 archivos / 8 horas procesan un archivo cada 1.3 segundos ... por otro lado, eliminarlos en un script (después de saber cuáles) toma menos de cinco minutos, eso es eliminar aproximadamente 133 por segundo ... diferencia.
¡Definitivamente el cleanmgr
tiempo no es causado por el deletion
mismo! Que mas esta haciendo ¡Por favor, M $ mejora esa velocidad!