Что происходит в IIS7 между Application_BeginRequest и Application_PreRequestHandlerExecute? - PullRequest
6 голосов
/ 17 февраля 2011

У меня есть несколько операторов трассировки с метками времени в приложении ASP.Net IIS, которое получает большой трафик.У меня есть инструкции трассировки в конце Application_BeginRequest и в начале Application_PreRequestHandlerExecute в моем Global.asax.Иногда между концом BeginRequest и началом PreRequestHandlerExecute возникает большая задержка, т. Е. Более 5 секунд.

Что происходит в жизненном цикле запроса HttpRequest между этими двумя вызовами методов, которые могут занимать так много времени?Это IIS7 на Windows Server 2008.

Спасибо.

1 Ответ

6 голосов
/ 10 марта 2011

Если BeginRequest уже произошел и задержка наступает раньше, чем PreRequestHandlerExecute, вы можете записать идентификатор потока. Если это не так, вы страдаете гибкостью потоков ASP.NET.

Причиной этого может быть использование сеансов. ASP.NET использует блокировку чтения-записи в HttpContext.Current.Session. Если вы записываете в эту переменную, все остальные запросы с тем же сеансом не могут выполняться одновременно и помещаются в очередь. .NET использует механизм опроса, чтобы проверить, снята ли блокировка сеанса.

Я бы также порекомендовал проверить, что вы используете Release и что system.web/compilation/@debug = 'false'

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