Перезагрузка на 51 градус при каждом запросе замедляет ASP.NET MVC до сканирования

Мой проект ASP.NET MVC 3 замедляется до минимума после добавления библиотеки обнаружения мобильных устройств 51Degrees. Файл журнала 51Degrees, определенный <log logFile="~/bin/App_Data/51Log.txt" logLevel="Info" /> в разделе <fiftyOne>, показывает, что библиотека устройств перезагружается для каждого запроса, добавляя 2-3-секундную задержку для каждого запроса:

2011-10-22T14:17:34.9863774Z - 8436 - Info - Loaded 14691 devices using 11640 strings in 1882ms
2011-10-22T14:17:50.8442844Z - 8436 - Info - Loaded 14691 devices using 11640 strings in 1820ms
2011-10-22T14:17:57.2756523Z - 8436 - Info - Loaded 14691 devices using 11640 strings in 1928ms
2011-10-22T14:18:01.0488681Z - 8436 - Info - Loaded 14691 devices using 11640 strings in 1886ms
2011-10-22T14:18:04.6790757Z - 8436 - Info - Loaded 14691 devices using 11640 strings in 1862ms

Кроме того, установка <fiftyOne> <log ... logLevel="Debug"> в web.config вызывает следующее исключение при запуске:

Storage scopes cannot be created when _AppStart is executing.

Обновление MVC 4

Все работает отлично, если я создаю пустое приложение ASP.NET MVC 4 и добавляю последний пакет NuGet 51Degrees 2.0.3.2. Как и ожидалось, в журнале указано, что двоичные данные загружаются только один раз, несмотря на многочисленные запросы (51Degrees.mobi-Lite-2012.01.05.dat).

Осторожно оптимистично, я скопировал весь свой основной код проекта MVC 3 в новый проект ASP.NET MVC 4 и повторно добавил последний пакет 51Degrees, но проблема повторяется. Должна быть несовместимость с одним из моих пакетов или странная настройка.

Лог показывает, что библиотека перезагружается для каждого запроса:

2012-01-18T11:50:02.5026920Z - 11928 - Info - Creating provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:02.8137098Z - 11928 - Info - Created provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:07.7419917Z - 11928 - Info - Creating provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:08.0170074Z - 11928 - Info - Created provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:10.4191448Z - 11928 - Info - Creating provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:10.7251623Z - 11928 - Info - Created provider from binary data file '~\App_Data\51Degrees.mobi-Lite-2012.01.05.dat'.

Задержка намного меньше, чем у файла данных XML (300 мс против 3000 мс), но все же вызывает заметную задержку.

Файлы 51Degrees.mobi.config двух проектов идентичны, и в моем файле web.config это модуль, который я загрузил:

<modules>
    <remove name="Detector"/>
    <add name="Detector" type="FiftyOne.Foundation.Mobile.Detection.DetectorModule, FiftyOne.Foundation"/>
</modules>

Что может быть причиной перезагрузки библиотеки 51Degrees при каждом запросе?


person Petrus Theron    schedule 22.10.2011    source источник
comment
Это довольно популярная библиотека. Ни у кого больше нет этой проблемы?   -  person Petrus Theron    schedule 24.11.2011


Ответы (2)


Это происходит из-за того, что файл журнала находится в папке bin. Всякий раз, когда что-либо изменяется в папке bin, рабочий процесс перезапускается. Переместите файл журнала в папку ~/App_Data, и вы обнаружите, что проблема будет решена. Благодарим вас за использование 51Degrees.mobi.

person James Rosewell    schedule 25.01.2012

Я взял демонстрационное приложение MVC3MobileDect из CodePlex. Я запустил его с помощью сервера веб-разработки ASP.NET и IIS Express, и ни один из них не показал проблемы, с которой вы столкнулись, когда библиотека перезагружает все устройства для каждого запроса к веб-серверу.

Кроме того, демонстрационный проект не включал модификацию BrowserCapabilitiesProvider в Application_Start (тем не менее, он все еще работает, даже когда я его добавил).

На этом этапе, предполагая, что вы используете версию с открытым исходным кодом, я предлагаю взять исходный код для сборок Foundation и начать с установки точки останова в

\Foundation\Mobile\Detection\Wurfl\Provider.cs (скорее всего в методе InitWurflFiles).

Возможно, в стеке вызовов будет что-то, что поможет вам лучше понять, что происходит.

Или сравните конфигурацию демонстрационного проекта с вашим веб-приложением.

person WiredPrairie    schedule 28.11.2011
comment
Спасибо, я думаю, это может быть как-то связано с конфигурацией Application_Start. - person Petrus Theron; 29.11.2011