Приложение ASP.Net запускается медленно - PullRequest
6 голосов
/ 08 февраля 2010

У меня есть веб-приложение, написанное на ASP.Net 3.0 с использованием C #, рабочая машина - Windows Server 2003 с IIS 6.0 и SQL Server 2005.

Структура приложения

Ниже показана структура моего веб-приложения ASP.net:

корневое приложение в IIS (// localhost / es) включает в себя общие страницы, например: главные страницы, тема, пользовательский элемент управления, папка с изображениями. количество подпроектов в корневом приложении (// localhost / es / sub-project). удалить web.config в подпроектах Сборка файлов подпроектов находится в папке bin корневого приложения (свойства подпроекта >> compile >> build output path: .. \ bin \ мое приложение представляет собой трехуровневое веб-приложение (уровень смещения, уровень данных и уровень представления. Кроме того, каждая страница aspx имеет свой код за файлом cs)

Настройки IIS

Пул приложений Переработка рабочего процесса после «1740 в минутах» Время простоя рабочих процессов после простоя "20 минут" Рабочий процесс Ping каждые 30 секунд
Ограничение времени запуска для рабочего процессора "90 секунд" Ограничение по времени отключения для рабочего процессора "90 секунд"

Конфигурация приложения
Кеш ограничен ASP-файлами в памяти "500"

Кэширование ограниченных ASP-файлов на диске "2000"

Развертывание приложения:

Я публикую веб-приложение со всеми его файлами на рабочем сервере.

Проблема:

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

Попытки решить проблему:

Я пытался сделать следующее:

  • Развертывание копии необходимых файлов на производственном сервере.
  • Изменены настройки IIS, изменено время ожидания простоя рабочего процесса
  • Отключить трассировку
  • Отключить состояние сеанса
  • Отключить просмотр состояния страницы
  • Установить debug = false в web.config
  • Создание подпроекта hello world под корневым приложением, это занимает 5 секунд.
  • Создание отдельного веб-приложения hello word, как указано выше, загрузка занимает много времени.
  • Удалите код в обработчике событий page_load, но это не повлияло на производительность.
  • Публикация только необходимого файла корневого приложения (без кода, написанного в коде позади) и всех файлов в исходном коде подпроекта (код находится в коде позади),

Тем не менее, приложение все еще запускается медленно, но затем оно становится быстрее.

Пожалуйста, помогите диагностировать и решить эту проблему.

Ответы [ 9 ]

5 голосов
/ 08 февраля 2010

В дополнение к тому, что сказал Sky, вы можете запустить «сценарий разминки» в качестве последнего шага процесса развертывания. Хотя это не ускорит время, необходимое для первой компиляции, использование такого скрипта, по крайней мере, не даст пользователям увидеть медленный запуск. Посмотрите здесь пример такого скрипта: http://programmerramblings.blogspot.com/2008/09/aspnet-site-warmup.html

Другая причина, по которой самый первый запрос к вашему приложению является медленным, может заключаться в том, что IIS должен запустить рабочий процесс asp.net во время самого первого запроса. Однако это не должно влиять на первые запросы к другим страницам.

2 голосов
/ 08 февраля 2010

публиковать сайт, который предварительно компилируется, а не копировать его.

Нормальное поведение, которое вы испытываете.

1 голос
/ 13 мая 2013

Вы также можете использовать функцию автозапуска приложения, которая доступна для веб-приложений .net Framework 4.Для получения дополнительной информации посетите здесь .

1 голос
/ 13 марта 2012

У меня было то же самое в приложении ruby ​​on rails с пассажиром, но я нашел хороший инструмент (http://www.wekkars.com), который просто не дает веб-серверу засыпать.

0 голосов
/ 22 мая 2016

Для приложений asp.net, работающих на IIS 7.0 и более ранних версиях, написание прогревной программы или сценария - лучший способ предотвратить тайм-ауты пула приложений. Этот триггер разогрева можно настроить из того же приложения или с внешних веб-сайтов или программ. В этой статье

вы можете найти разные способы достижения того же самого.
0 голосов
/ 10 мая 2015

Всегда будет небольшая задержка при первой загрузке любого приложения .NET из-за компонента CLR в платформе .NET Framework. Поскольку JIT (Just in Time), находящийся в CLR (среда выполнения для ASP.NET), преобразует промежуточный язык (IL) в собственный машинный код, при первом выполнении приложений .net всегда будет немного больше времени.

Подробное видео по этой конкретной проблеме можно посмотреть на:

https://www.youtube.com/watch?v=ruf4U9_Rbss&index=1&list=PL8598C97BA1D871C1

Надеюсь, это поможет.

0 голосов
/ 01 декабря 2014
VBscript + Dos Batch file... run every 1 hr 


Dim strNewTime , strSiteName
strNewTime = Now() 
strNewTime = Replace(strNewTime, "/","")
strNewTime = Replace(strNewTime, " ","")
strNewTime = Replace(strNewTime, ":","") 

strSiteName = "https://www.yoursite.com/userlogin.aspx?dummytime=" + strNewTime

Dim oXMLHTTP
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")       

oXMLHTTP.Open "GET", strSiteName, False
oXMLHTTP.Send

If oXMLHTTP.Status = 200 Then
'  working
ELSE
    CALL SendEmail("!!! www - web site is NOT working... " + strSiteName + " *** ") 
End If

Set oXMLHTTP = Nothing 
0 голосов
/ 24 июля 2010

попробуйте предварительно скомпилировать свой сайт:

http://msdn.microsoft.com/en-us/library/ms227972.aspx

0 голосов
/ 08 февраля 2010

Обойти это невозможно. Вы всегда получите небольшую задержку при первой загрузке при компиляции сайта.

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