Алгоритм чтения командного файла в cmd.exe :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 04.09.23 14:38
Оценка: 133 (3)
У меня есть несколько тестовых виртуалок с разными версиями винды, включая XP, и для автоматизации работы в них используются командные файлы с хоста, вызываемые через shared folders. Давно заметил, что работа мало-мальски сложных командных файлов в виртуалках совершенно неадекватно тормозит. Например, десяток скриптов, вызывающих друг друга для настройки окружения и копирования нескольких файлов с хоста, может работать по полминуты и дольше. Пару раз порывался выяснить, отчего так тормозит, но обнаружилось, что везде тормозит равномерно, а разбираться глубже руки не доходили.

Сегодня вот, наконец, дошли — догадался последить за работой cmd.exe в Process Monitor. Увидел, что для чтения каждой строки скрипта он открывает файл, устанавливает текущую позицию, читает до 8191 символа (максимальная длина строки), затем закрывает файл. Внутри одной системы спасает кэширование, а для сетевых операций то ли винда, то ли поддержка shared folders, добавляют флаг запрета кэширования, и привет.

Теперь мучительно пытаюсь это развидеть, и заодно понять, в каком бреду можно было родить такой чудовищный алгоритм. Это не CRT — чтение в cmd.exe реализовано независимо. И так оно работает вплоть до последних версий Win 11, если что.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.