Как упоминал Гатс, проблема в том, что ASP.NET блокирует сеанс, поэтому каждый запрос для одного и того же сеанса должен выполняться последовательно.
Раздражает то, что если бы я выполнил все 5 запросов последовательно (из примера), это заняло бы ~ 40 мс. С блокировкой ASP.NET это более 1000 мс. Похоже, ASP.NET говорит: «Если сеанс используется, то поспите 500 мс и повторите попытку».
Если вы используете StateServer или SqlServer вместо InProc, это не поможет - ASP.NET по-прежнему блокирует сеанс.
Есть несколько разных исправлений. Мы закончили тем, что использовали первый.
Используйте куки вместо
Файлы cookie отправляются в заголовке каждого запроса, поэтому вы должны держать его в поле зрения и избегать конфиденциальной информации. Тем не менее, сессия использует куки по умолчанию, чтобы запомнить кто есть кто, сохраняя строку ASPNET_SessionId. Все, что мне было нужно, - это идентификатор, поэтому нет смысла терпеть блокировку сеансов ASP.NET, когда это просто оболочка вокруг идентификатора в cookie.
Так что мы полностью избегаем сеанса и вместо этого сохраняем guid в cookie Файлы cookie не блокируются, поэтому задержки устранены.
Использовать атрибуты MVC
Вы можете использовать сеанс, но избегайте блокировок определенных запросов, делая сеанс доступным только для чтения.
Для приложений MVC 3 используйте этот атрибут на контроллере, чтобы сделать сеанс доступным только для чтения (он не работает с определенным действием):
[SessionState(SessionStateBehavior.ReadOnly)]
Отключить сеанс для некоторых маршрутов
Вы также можете отключить сеанс через маршрутизацию MVC , но это немного сложно.
Отключить сеанс на определенной странице
Для веб-форм вы можете отключить сеанс для определенных страниц aspx .