Я рассматриваю возможность использования сценариев Powershell для триггеров на нашем сервере Perforce. К сожалению, даже на нашем быстром оборудовании для запуска Powershell все еще требуется 2 секунды. Теперь это не похоже на много времени, если вы не считаете, что 200 пользователей постоянно забивают сервер, а триггер (в зависимости от условий) вызывает блокировку таблицы во время ее запуска, останавливая другие связанные запросы.
Я ищу способы сократить время запуска Powershell. Вещи, которые я нашел в Google:
- Уменьшить профиль. Это установка по умолчанию, настройка профиля, отсутствие PSCX и т.д., Поэтому это не помогает.
- Запустите NGEN в бинарных файлах Posh. Это старый совет по проблеме V1. Мы на V2.
- Держите тепло. Первоначальный запуск Posh медленный, но более поздние стартапы бывают быстрыми. Также не полезно для нас. На сервере теплый старт составляет 2 секунды, и он постоянно нагревается частыми запросами.
- Не используйте Powershell для этой цели. Ну, я надеюсь избежать этого "решения"...
Есть ли у кого-нибудь другие предложения по сокращению времени запуска? Я не ожидаю стартапа так быстро, как cmd.exe или .NET командной строки, но если я смогу получить это .5 секунд, я думаю, что все будет в порядке. Невозможно?
ОБНОВЛЕНИЕ. Оказывается, это проблема 4.0. Если я добавлю конфигурационный файл, как описано в другом вопросе SO, запуск займет 2 секунды. Если я оставлю его по умолчанию, то запуск будет за четверть секунды.
Тогда я подумал... возможно, это проблема 4.0 GAC. Поэтому я запустил script в блоге PowerShell, но он говорит, что все сборки уже ngen'd. Я убедился, что он действительно использует 4.0 ngen.
Итак, у меня осталось два варианта:
- Выясните, почему 4.0 намного дороже 3.5.
- Переключитесь на фреймворк 3.5, где он мне не нужен, и мне нужна производительность.
Я бы хотел решить первое, но не знаю с чего начать. Может ли кто-нибудь помочь?