Медленное Application_Start на global.asax делает тупик - PullRequest
3 голосов
/ 27 июля 2011

Мой код Application_Start в global.asax занимает 2-3 минуты (длинные запросы к базе данных и т. Д.)приложение не запускается.

Единственный способ запустить его - это когда я отключаю доступ к IIS из Интернета, перезапускаю приложение снова и делаю один вызов на сайт (для глобального.asax) на работу.

Я не понимаю, почему возникает тупик, когда я получаю много запросов страниц / файлов при запуске приложения.Я знаю, что Application_Start в global.asax запускается только один раз, и я предполагаю, что все остальные клиенты просто ждут, пока событие не завершится, поэтому я не вижу причины для этого тупика.

Любые мысли?

Обновление:

Это занимает больше 4-5 минут ... Код выполняет запросы к базе данных и присоединяет их к переменной Application (для дальнейшего использования).это виртуальный сервер на моем выделенном сервере.только одна другая машина, которая не занимает много ресурсов.Я получаю событие с кодом 2262 - ISAPI '... \ aspnet_isapi.dll' сообщил о себе как о нездоровом по следующей причине: 'Обнаружен тупик'.

Существует один SQL-запрос, который занимает большую часть времени.Я могу выполнить этот запрос в другом процессе (служба Windows / и т. Д.), Но проблема в том, что я не понимаю, почему это происходит .... Что произойдет, если в будущем мне придется разместить внутри некоторый трудоемкий кодApplication_Start?

1 Ответ

3 голосов
/ 27 июля 2011

С этим подходом связано несколько проблем.

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

Application_Start должен завершиться как можно быстрее, чтобы среда выполнения знала, что все загружено нормально,Я считаю, что ваш тупик не тупик, как в типичном сценарии, а как в сценарии «я думаю, что он застрял».

Как уже упоминалось - один из вариантов - перенести обработку в другой поток.Однако обратите внимание, что когда ваше приложение некоторое время простаивает, оно будет закрыто.Вы можете изменить эти настройки в IIS, но я бы действительно подумал о переосмыслении этой загрузки данных.Почему бы не запросить по запросу из базы данных?Вы можете создать новое индексированное представление с этими данными на стороне базы данных (среди прочих предложений)

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