51 Степень перезагрузки при каждом запросе замедляет ASP.NET MVC для сканирования - PullRequest
7 голосов
/ 22 октября 2011

Мой проект 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 Update

Все работает отлично, если я создаю пустой ASP.NET MVC 4приложение и добавить последнюю версию пакета 51Degrees 2.0.3.2 NuGet.Как и ожидалось, журнал отражает, что двоичные данные загружаются только один раз, несмотря на многочисленные запросы (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 при каждом запросе?

Ответы [ 2 ]

7 голосов
/ 25 января 2012

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

0 голосов
/ 29 ноября 2011

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

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

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

\Foundation\Mobile\Detection\Wurfl\Provider.cs (вероятно, в методе InitWurflFiles).

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

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

...