Как ускорить запуск Powershell в среде 4.0? - PullRequest
15 голосов
/ 17 ноября 2010

Я рассматриваю возможность использования скриптов Powershell для триггеров на нашем сервере Perforce.К сожалению, даже на нашем быстром оборудовании для запуска Powershell все еще требуется 2 секунды.Теперь, похоже, это не так много времени, если не считать, что 200 пользователей постоянно набрасывают на сервер, а триггер может (в зависимости от условий) вызывать блокировку таблицы во время его работы, останавливая другие связанные запросы.

Я ищу способы сократить время запуска Powershell.Вещи, которые я нашел в Google:

  • Уменьшите профиль. Это установка по умолчанию, без настройки профиля, без PSCX и т. Д., Так что это не поможет.
  • Запустите NGEN на шикарных двоичных файлах. Это старый совет для выпуска V1.Мы находимся на V2.
  • Держите его в тепле. Первоначальный шикарный запуск медленный, но последующие запуски быстрые.Также не полезно для нас.На сервере горячий запуск составляет 2 секунды, и он часто нагревается частыми запросами.
  • Не используйте Powershell для этой цели. Что ж, я надеюсь избежать этого "решения"...

У кого-нибудь есть другие предложения по сокращению времени запуска?Я не ожидаю запуска так же быстро, как cmd.exe или приложение командной строки .NET, но если мне удастся добиться этого за 0,5 секунды, я думаю, что все будет в порядке.Невозможно?

ОБНОВЛЕНИЕ - оказывается, это проблема 4.0.Если я добавлю файл конфигурации, как описано в , другой вопрос SO , запуск займет 2 секунды.Если я оставлю его по умолчанию, то запуск займет менее четверти секунды.

Тогда я подумал ... возможно, это проблема 4.0 GAC.Поэтому я запустил скрипт в блоге PowerShell , но он говорит, что все сборки уже ngen'd.Я убедился, что он действительно использует 4.0 ngen.

Так что у меня есть два варианта:

  • Выясните, почему 4.0 намного дороже, чем 3.5.
  • Переключитесь на платформу 3.5, где она мне не нужна, и мне нужна производительность.

Я хотел бы решить первое, но не знаю с чего начать.Кто-нибудь может помочь?

Ответы [ 3 ]

21 голосов
/ 07 апреля 2014

Запустите NGEN на шикарных двоичных файлах. Это старый совет для проблемы V1. Мы находимся на V2.

Я играл с этим под V3, и я обнаружил, что некоторые изображения были генерироваться.

И, конечно, такое чувство, что стартап стал намного быстрее. Я буду знать лучше после перезагрузка, так как в первый раз всегда хуже. (Мой обновленный) скрипт для этого с Win 7 это

$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
  if (! $_.location) {continue}
  $Name = Split-Path $_.location -leaf
  Write-Host -ForegroundColor Yellow "NGENing : $Name"
  ngen install $_.location | % {"`t$_"}
}
2 голосов
/ 04 декабря 2014

Получив отличный ответ на мой вопрос по Technet , я обнаружил гораздо более простой способ запуска NGEN вручную (поскольку, похоже, это не происходит автоматически при чистой установке Windows 8.1):

schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319"
schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64"
1 голос
/ 17 ноября 2010

Боюсь, что вам, вероятно, не повезет, если вы будете придерживаться консольного хоста powershell.exe, если только вы не хотите писать оптимизированный обработчик сценариев, размещая фабрику runspace / runspace в пользовательском консольном приложении или службе Windows.- ты катишься сам.Вы можете сбрить секунду, но запуск приложения .NET на 0,5 с маловероятен, особенно если серверы не хватает памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...