Узкое место в новом окне MVC
Я столкнулся с причудливой проблемой, которой у меня не было ранее, и я подумал, что я буду спрашивать здесь, чтобы узнать, есть ли у кого-нибудь какие-либо рекомендации.
В настоящее время мое приложение имеет область для создания новой "записи" (которая использует модуль Flash в новом окне для записи звука), и когда запись заканчивается, пользователь отправляет форму, и все аудиоданные публикуются в моем контроллер.
Этот процесс может варьироваться по продолжительности в зависимости от размера аудио, поэтому окно будет оставаться открытым до завершения загрузки, а затем закрывается.
Проблема возникает во время процесса загрузки, если пользователь загружает запись и во время ее загрузки пытается открыть новое окно (которое заполнено представлением "Создать запись"), и загрузка содержимого нового окна останавливается до момента загрузки завершено.
Весь процесс работает нормально, если я открою несколько окон для создания записи до фактической загрузки одного из них, однако, если я начну загружать одно, а затем попытаюсь открыть новое окно, тогда он будет "ждать", пока операция загрузки не закончится, прежде чем заполнение содержимого нового окна.
1 ответ
Я думаю, что у вас возникли проблемы с сессиями.
Все, что обслуживается во время активного сеанса и может его изменить (т. Е. Любой запрос.Net, но не images/css/etc), получит эксклюзивную блокировку объекта сеанса до завершения запроса. Другие запросы, которые могут получить доступ к сеансу, будут поставлены в очередь, пока не будет снята блокировка.
Больше информации здесь
Это можно обойти, указав, что для определенных запросов необходим только доступ только для чтения к состоянию сеанса. См. Ответы по ссылке Q для более подробной информации.
Здесь есть реализация пользовательского модуля состояния сеанса, который может значительно ускорить процесс. Он работает, кэшируя информацию о сеансе в хэш-таблице в памяти, а затем сообщает платформе, что доступ к сеансу завершен.
Обратите внимание, что при таком подходе есть потенциальные проблемы, заключающиеся в том, что если 2 страницы изменяют сеанс примерно в одно и то же время, это может привести к состоянию гонки, чтобы увидеть, какие изменения будут сохранены - так что делайте это, только если вы полностью понимаете последствия.