После включения автозапуска IIS 7.5 первый запрос все еще медленный - PullRequest
4 голосов
/ 11 августа 2011

Я установил атрибут startMode = "AlwaysRunning" в моем пуле приложений и атрибут serviceAutoStartEnabled = "true" в моем приложении в конфигурации IIS. Я даже настроил serviceAutoStartProvider и вижу, что исполняется код «прогрева». Я также вижу, что процесс w3wp автоматически запускается после iisreset. Тем не менее, первый запрос к моему приложению ASP.NET MVC происходит так же медленно, как и без автозапуска. Есть какой-то момент, который я пропускаю, или какой-либо способ легко отладить это без профилировщика?

Ожидается ли, что эта функция вообще повлияет на производительность первого запроса? Какова основная часть работы над первым запросом, если рабочий процесс готов, домен приложений .NET и даже все сборки .NET загружены?

1 Ответ

2 голосов
/ 01 января 2012

Я недавно изучал это.

Насколько я могу судить, функция автозапуска заставит ваши рабочие потоки IIS (по умолчанию только один для пула) скомпилировать JIT передпервый запрос.

Тем не менее, то, что скомпилировано, похоже, представляет собой большую часть сборок и зависимостей, но не обязательно каких-либо методов.

Когда этот первый запрос происходит, и ваши методыПри первом вызове JITer выполняет окончательную компиляцию тех методов, которые еще не были скомпилированы.

Преимущество autoStart заключается в том, что он позволяет .Net выполнять 90% работы заранее., но последние 10% по-прежнему оплачиваются, когда происходит первый запрос, и те методы, к которым еще не было доступа, запускаются впервые.

...