Почему MinGW очень медленный?
Начиная с MSYS 1.0.19-1
, если учетная tuning запись пользователя находится fast в домене Active Directory, а cpp контроллер домена (DC) недоступен, то mingw MSYS DLL
приведет к длительной задержке speed перед запуском любого исполняемого performance файла MSYS (который использует faster MSYS DLL
). Это влияет на MSYS make
и faster все утилиты командной строки perfomance из пакета CoreUtils, такие code-efficiency как ls
, rm
и т. Д., Которые обычно efficiency устанавливаются в C:\MinGW\msys\1.0\bin
.
Наблюдения:
-
При performance запуске утилит из оболочки c++ MSYS
bash
задержка затрагивает perfomance только запуск оболочки. Утилиты, запускаемые cxx из оболочки, не влияют. -
Задержка mingw может быть разной, в моем mingw случае она составляет 21 perfomance секунду.
- Запуск любой утилиты MSYS в течение 10-20 секунд после отложенной команды запустится без новой задержки.
- Проблема возникает, когда компьютер подключен к другой сети, или когда он отключен от своего домена, или когда изменяется имя хоста контроллера домена (проблема в моем случае). Чтобы проверить, доступен ли DC, откройте
cmd
и введитеecho %LOGONSERVER%
, затемping
илиnet view
с именем хоста DC.
Почему так медленно:
- Код
MSYS DLL
вuinfo.cc internal_getlogin()
выполняет два системных вызова для получения информации о пользователе. В первый раз он вызываетNetUserGetInfo()
, чтобы получить учетную запись пользователя с локального компьютера. Он не работает для пользователей домена, поэтому он вызывает его второй раз с сервером DC, взятым из переменнойLOGONSERVER
. Если этот хост недоступен немедленно, это приведет к длительной задержке до тех пор, пока вызов не завершится по таймауту. Приложение запустится вскоре после этого.
Как cxx избежать этой проблемы, несколько code-efficiency обходных путей:
- Либо запустите все из оболочки MSYS, либо
- Если причиной является изменение имени хоста контроллера домена, перезагрузка или повторный вход решат проблему. Windows автоматически обновит
LOGONSERVER
, указав правильный хост DC. - Если инструменты MSYS вызываются из Windows
cmd
или скрипта, установите дляLOGONSERVER
локальный хост, чтобы избежать доступа к сети. Например.set LOGONSERVER=\\LOCALHOST
работал у меня. Примечание: эта переменная устанавливается при входе в систему, и ее глобальное изменение в окне переменных среды Windows не имеет никакого эффекта по сравнению с ее установкой в cmd
или скрипте. - Я считаю это ошибкой в MinGW / MSYS. Код в MSYS2 и Cygwin отличается. Я проверил MSYS2, и в нем нет такой проблемы.
c++
performance
mingw
codeblocks
Почему MinGW очень медленный?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.