movimentação lenta do diretório do Windows XP

2

Quando eu movo um diretório contendo 900 MB em arquivos 4k para outro diretório no mesmo sistema de arquivos, demora quase 1 minuto e ouço o disco funcionando. É NTFS no Windows XP, o disco é bastante rápido (ST3100015 28AS) e funciona bem de acordo com o CrystalMark. Eu desliguei o antivírus e não há mais nada em execução (há muitos processos, mas nenhum deles funciona).

WTF está fazendo em vez de alterar duas entradas de diretório?

    
por maaartinus 05.02.2011 / 18:59

4 respostas

2

A suposição errônea que você está fazendo aqui é que mover itens de subpasta em uma pasta do Explorer é uma operação simples que envolve simplesmente modificar algumas entradas de diretório. Não é. A chamada de sistema de baixo nível para mover um arquivo pode ser. Mas o Microsoft Windows Explorer coloca camadas acima disso. Um "movimento" de um item de pasta pode acabar sendo uma "cópia para novo nome e, em seguida, excluir original" no nível inferior em vez de "renomear essa entrada de diretório para esse diretório pai". Naturalmente, a primeira é uma operação muito mais cara que a segunda.

Por que o Explorer faz isso? Para começar, é porque uma pasta não é um diretório . Nem todas as "pastas" que o Explorer apresenta ao usuário são diretórios legítimos honestos em um volume de disco. O Explorer tem que, por exemplo, descobrir o que significa "mover" um diretório de / para uma pasta virtual indicando arquivos remotos em um telefone inteligente visto através de uma conexão FTP Bluetooth. Essa não é uma operação simples de renomeação no nível da API do sistema bruto. O mesmo acontece com a Lixeira, cuja expressão real no nível do arquivo e do diretório não processados é específica do formato do sistema de arquivos .

O Explorer tem um "mecanismo" que determina o que as ações "copiar", "mover", "renomear" e "excluir" para objetos shell realmente significam no nível da API do sistema bruto. No Explorer que vem no Windows NT 6.0 e posterior, a operação "mover" é o IFileOperation::MoveItem() method . (Ela costumava ser a SHFileOperation() function todos os sinalizadores de operação que podem ser definidos , que podem incluir gravação de informações de desfazer, detecção de colisão e criação automática de nome, verificação de dados de última modificação, Sobrescrevendo o antigo descritor de segurança e atualizando os diálogos de progresso.

Se você quiser testar quanto tempo leva para alterar algumas entradas do diretório, use um aplicativo que faça apenas isso , e não faça todas as camadas do Explorer sobre ele, como, por exemplo, o comando mv .

    
por 26.02.2011 / 18:24
1

Parece que o Explorer tem a compulsão de verificar se há arquivos que não deseja mover. Isso inclui arquivos somente leitura, executáveis e tudo o mais (como se um programa que eu pudesse reinstalar valesse mais do que meus próprios arquivos). Esta verificação parece ser o problema. Quando eu movo o diretório usando outro programa, é muito mais rápido, mas ainda leva de um a dois segundos.

Alguém poderia gentilmente medir quanto tempo leva em seu computador? Como um diretório para brincar eu tirei uma cópia do diretório do Windows.

    
por 05.02.2011 / 22:11
1

Se você tiver uma ferramenta instalada que conecte as operações de arquivo no Explorer, isso poderá causar lentidão. O HardLinkShellExt pode fazer isso, outros também. Veja quais extensões do shell você instalou.

    
por 05.02.2011 / 23:44
-2

Isso é tudo o que está fazendo, no entanto, 4000 arquivos é muito, e vai demorar muito mais do que um arquivo de 900mb.

Abra o YouTube e assista algo enquanto aguarda ou simplesmente seja mais paciente!

    
por 05.02.2011 / 19:02