Spostamento lento della directory di Windows XP


2

Quando sposto una directory contenente 900 MB in file 4k in un'altra directory nello stesso filesystem, ci vogliono quasi 1 minuto e sento che il disco funziona. È NTFS su Windows XP, il disco è abbastanza veloce (ST3100015 28AS) e funziona bene secondo CrystalMark. Ho disattivato l'antivirus e non c'è nient'altro in esecuzione (ci sono molti processi, ma nessuno fa alcun lavoro).

Cosa sta facendo invece di cambiare due voci della directory?


Stai spostando l'intera directory o solo i file interni? E sei sicuro che si trovino sullo stesso filesystem? (Windows può montare un altro filesystem come directory.)
gravità

Naturalmente, l'intera directory - ecco perché ho scritto "cambiando due voci della directory". E sì, ci sono definitivamente sullo stesso filesystem - ho creato due nuove directory per il test, sicuramente non c'è niente montato lì.
maaartinus,

Risposte:


2

Il presupposto errato che si sta facendo qui è che spostare gli elementi delle sottocartelle in una cartella di Explorer sia un'operazione semplice che comporta semplicemente la modifica di un paio di voci della directory. Non lo è. Potrebbe essere la chiamata di sistema di basso livello per spostare un file. Ma Microsoft Windows Explorer mette i livelli in cima a quello. Uno "spostamento" di un elemento della cartella può finire per essere una "copia in un nuovo nome, quindi eliminare l'originale" a basso livello anziché "rinominare questa voce di directory in quella directory principale". Certo, il primo è un'operazione molto più costosa del secondo.

Perché Explorer fa questo? Per cominciare, è perché una cartella non è una directory . Non tutte le "cartelle" che Explorer presenta all'utente sono directory in buona fede onestà su un volume di disco. Explorer deve, ad esempio, capire cosa significa "spostare" una directory da / in una cartella virtuale che denota i file remoti su uno smart phone visualizzato tramite una connessione FTP Bluetooth. Non è una semplice operazione di ridenominazione a livello di API di sistema non elaborato. Lo stesso vale per il Cestino, la cui espressione effettiva a livello di file e directory non elaborati è specifica del formato del file system .

Explorer ha un "motore" che risolve il significato delle azioni "copia", "sposta", "rinomina" ed "elimina" per gli oggetti shell a livello di API di sistema non elaborate. Nell'Explorer disponibile in Windows NT 6.0 e versioni successive, l'operazione "sposta" è il IFileOperation::MoveItem()metodo . (Era la SHFileOperation()funzione .) C'è un sacco di roba non ovvia che continua, anche in quello che si potrebbe erroneamente pensare che potrebbe essere una semplice chiamata di sistema "rinominare" , per fornire la semantica visibile all'utente finale di "spostamento" di una sottocartella in Esplora risorse. Ciò include tutta l'elaborazione per tutti i flag di operazione che è possibile impostare , che può includere la registrazione delle informazioni di annullamento, il rilevamento delle collisioni e la denominazione automatica,sovrascrivendo il vecchio descrittore di sicurezza e aggiornando i dialoghi di avanzamento.

Se vuoi testare quanto tempo ci vuole per cambiare alcune voci di directory, usa un'applicazione che fa solo questo e non fa tutti i livelli Explorer sopra di essa, come il mvcomando .


1
Questo è tutto. Windows fa molte cose fantasiose per rendere il mio computer simile a un i386.
maaartinus

Hai dimenticato di menzionare che Esplora risorse sposta i file in modo ricorsivo anziché atomico. Crea la cartella di destinazione, quindi scava nelle sottocartelle per ricreare l'albero e quindi sposta i file uno per uno, sottocartella per sottocartella.
Lupo,

1

Sembra che Explorer abbia una coazione a controllare se ci sono file che non vuole spostare. Ciò include file di sola lettura, file eseguibili e quant'altro (come se un programma che posso reinstallare fosse più utile dei miei file). Questo controllo sembra essere il problema. Quando sposto la directory usando un altro programma, è molto più veloce, ma ci vogliono ancora uno o due secondi.

Qualcuno potrebbe gentilmente misurare quanto tempo impiega il proprio computer? Come directory con cui giocare ho preso una copia della directory di Windows.


1

Se è installato uno strumento che aggancia le operazioni sui file in Explorer, può causare rallentamenti. HardLinkShellExt può farlo, anche altri. Vedi quali estensioni della shell hai installato.


IIRC, non c'è niente del genere. L'unica cosa che rallenta il mio computer è l'antivirus e l'ho spento per il test (non ha fatto differenza).
maaartinus,

In quali circostanze HardLinkShellExt può causare esattamente questo?
Syclone0044

La sua funzione Smart Move può causare una grande quantità di I / O mentre controlla giunzioni e collegamenti, poiché deve percorrere l'intero albero di directory. Questo non è normale per una semplice operazione di spostamento o ridenominazione che rimane sullo stesso volume. In Explorer, questa è normalmente un'operazione immediata.
Afrazier

-2

Praticamente tutto ciò che sta facendo, tuttavia, 4000 file sono molto e impiegheranno molto più tempo di un file 900mb.

Accendi YouTube e guarda qualcosa mentre aspetti o sii più paziente!


1
In realtà una mossa dovrebbe essere piuttosto rapida - solo le voci della directory da aggiornare. @maaartinus hai spostato i file o copiati e poi eliminato gli originali?
Chris,

1
Ma non c'è motivo di nemmeno guardare i file. Lo stesso comando su Linux richiede una frazione di secondo, non importa quanti file ci siano, poiché a nessuno importa. È come parlare di un pacco di carta rallentato dalla quantità di fogli in essa contenuti.
maaartinus,

@ Chris: li ho spostati usando l'esploratore.
maaartinus,

@maaartinus - è 4k la dimensione del file o il numero di file (come suggerisce Wil). Se ha le dimensioni, quindi oltre 200.000 file in un minuto non sono poi così male. Prova anche a copiarli e vedi quanto tempo impiega.
Chris,

@Chris: ci sono 4000 file e la loro dimensione totale è di 900 MB. La copia richiede circa lo stesso tempo. Sistema stupido.
maaartinus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.