Даже на быстрых SSD-дисках удаление каталогов может занять довольно много времени, если их содержимое будет представлено множеством небольших файлов. Удаление через Проводник, в том числе с использованием Shift + Del — не самый лучший вариант, поскольку перед удалением, впрочем, как и перед копированием, Windows производит расчет и только потом приступает к основной процедуре. Кто-то наверняка скажет, что в таких случаях можно воспользоваться командой rmdir.
Да, такой способ действительно может ускорить удаление, но и это еще не предел.
Задействовав все возможности многопоточности и NtDeleteFile вместо стандартного API DeleteFile, можно сократить количество системных вызовов и ускорить удаление файлов примерно в два раза. Именно такие механизмы использует бесплатная утилита Byenow.
Скачать ее вы можете с сайта: https://iobureau.com/byenow/
Это консольный инструмент, работает он из командной строки или PowerShell. Распакуйте архив с утилитой и перейдите в консоли в расположение исполняемого файла. Теперь, чтобы удалить папку, вам нужно выполнить команду следующего вида:
byenow.exe [параметры] <путь>
Всего утилитой поддерживается семь ключей:
• -p --preview — выводит содержимое каталога без удаления данных.
• -s --staged — выводит содержимое каталога, а затем удаляет его.
• -1 -- one-liner — показывает прогресс одной строкой.
• -e --list-errors — выводит ошибки по завершении операции, если таковые были.
• -y --yes — подавляет подтверждение удаления вводом Y.
• -t --thread <count> — позволяет указать число потоков.
• -n --delete-ntapi — задействует метод NtDeleteFile вместо стандартного API.
Можно обойтись и без параметров, передав утилите в качестве единственного аргумента только путь к каталогу и подтвердив удаление вводом Y, например, byenow.exe D:\Folder.
А теперь самый главный вопрос — насколько действительно эффективнее удаление с помощью Byenow?
Для тестирования мы использовали папку с 20000 вложенными в нее пустыми каталогами, и вот какие получили результаты.
При удалении в Проводнике на подсчет содержимого ушло 40 секунд и еще 10 секунд было потрачено на удаление.
Использование стандартной команды rmdir с ключом s позволило сократить время удаления до 19 секунд.
Наконец, время удаления посредством Byenow без параметров составило 14 секунд и с параметром -n --delete-ntapi — 12 с половиной секунд.
Пусть это не в два раза быстрее, чем с rmdir, но то что результат оказался в целом положительным, не подлежит сомнению.
Добавить комментарий