2

Когда я перемещаю каталог, содержащий 900 МБ в файлах 4k, в другой каталог в той же файловой системе, это занимает почти 1 минуту, и я слышу, как работает диск. Это NTFS в Windows XP, диск довольно быстрый (ST3100015 28AS) и отлично работает в соответствии с CrystalMark. Я выключил антивирус, и больше ничего не работает (там много процессов, но никто не выполняет никакой работы).

WTF это делает вместо изменения двух записей каталога?

4 ответа4

2

Ошибочное предположение, которое вы здесь делаете, состоит в том, что перемещение элементов подпапки в папке Explorer - это простая операция, которая включает в себя просто изменение пары записей каталога. Это не так. Низкоуровневый системный вызов для перемещения файла может быть. Но Microsoft Windows Explorer размещает слои поверх этого. "Перемещение" элемента папки может в конечном итоге быть «копировать в новое имя, а затем удалять оригинал» на низком уровне, а не "переименовывать эту запись каталога в этот родительский каталог". Конечно, первая операция намного дороже, чем вторая.

Почему Explorer делает это? Начнем с того, что папка не является каталогом. Не все "папки", которые Explorer предоставляет пользователю, являются добросовестными добросовестными каталогами на томе диска. Обозреватель должен, например, решить, что значит "переместить" каталог из / в виртуальную папку, обозначая удаленные файлы на смартфоне, просматриваемые через FTP-соединение Bluetooth. Это не простая операция переименования на уровне необработанного системного API. То же самое относится и к корзине, чье фактическое выражение на уровне необработанных файлов и каталогов зависит от формата файловой системы.

В Explorer есть "движок", который определяет, что на самом деле означают действия "копировать", "переместить", "переименовать" и "удалить" для объектов оболочки на уровне API системы. В проводнике, который поставляется в Windows NT 6.0 и более поздних версиях, операция "перемещение" - это IFileOperation::MoveItem(). (Раньше это была функция SHFileOperation().) Существует целый ряд неочевидных вещей, которые продолжаются, даже в том, что можно ошибочно считать, что сопоставление может быть простым системным вызовом "переименования", чтобы обеспечить видимую конечному пользователю семантику "перемещения" элемента подпапки в Проводнике. Это включает в себя всю обработку для всех флагов операций, которые можно установить, которые могут включать в себя отмену записи информации, обнаружение коллизий и автоматическое переименование, проверку меток даты последнего изменения, переопределение старого дескриптора безопасности и обновление диалоговых окон прогресса.

Если вы хотите проверить, сколько времени требуется, чтобы изменить несколько записей каталога, используйте приложение, которое делает только это и не выполняет все слои Explorer поверх него, например команду mv.

1

Похоже, что у Explorer есть обязательство проверить, есть ли файлы, которые он не хочет перемещать. Это включает в себя только для чтения файлы, исполняемые файлы и все, что угодно (как если бы программа, которую я могу переустановить, стоила больше, чем мои собственные файлы). Эта проверка, кажется, проблема. Когда я перемещаю каталог с помощью другой программы, он намного быстрее, но все равно занимает одну-две секунды.

Может ли кто-нибудь измерить, сколько времени займет их компьютер? В качестве каталога для игры я взял копию каталога Windows.

1

Если у вас установлен инструмент, который перехватывает файловые операции в Проводнике, это может привести к замедлению работы. HardLinkShellExt может сделать это, другие тоже. Посмотрите, какие расширения оболочки вы установили.

-2

Это почти все, что он делает, однако 4000 файлов - это много, и это займет намного больше времени, чем один файл размером 900 МБ.

Запустите YouTube и смотрите что-то во время ожидания или просто будьте терпеливее!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .