Узкое место в новом окне MVC

Я столкнулся с причудливой проблемой, которой у меня не было ранее, и я подумал, что я буду спрашивать здесь, чтобы узнать, есть ли у кого-нибудь какие-либо рекомендации.

В настоящее время мое приложение имеет область для создания новой "записи" (которая использует модуль Flash в новом окне для записи звука), и когда запись заканчивается, пользователь отправляет форму, и все аудиоданные публикуются в моем контроллер.

Этот процесс может варьироваться по продолжительности в зависимости от размера аудио, поэтому окно будет оставаться открытым до завершения загрузки, а затем закрывается.

Проблема возникает во время процесса загрузки, если пользователь загружает запись и во время ее загрузки пытается открыть новое окно (которое заполнено представлением "Создать запись"), и загрузка содержимого нового окна останавливается до момента загрузки завершено.

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

1 ответ

Решение

Я думаю, что у вас возникли проблемы с сессиями.

Все, что обслуживается во время активного сеанса и может его изменить (т. Е. Любой запрос.Net, но не images/css/etc), получит эксклюзивную блокировку объекта сеанса до завершения запроса. Другие запросы, которые могут получить доступ к сеансу, будут поставлены в очередь, пока не будет снята блокировка.

Больше информации здесь

Это можно обойти, указав, что для определенных запросов необходим только доступ только для чтения к состоянию сеанса. См. Ответы по ссылке Q для более подробной информации.

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

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

Другие вопросы по тегам