51Degrees перегруза на каждый запрос тормозит 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">
в интернете.config выдает следующее исключение при запуске:
Storage scopes cannot be created when _AppStart is executing.
обновление MVC 4
все работает отлично если я создам пробел 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_DataDegrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:02.8137098Z - 11928 - Info - Created provider from binary data file '~App_DataDegrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:07.7419917Z - 11928 - Info - Creating provider from binary data file '~App_DataDegrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:08.0170074Z - 11928 - Info - Created provider from binary data file '~App_DataDegrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:10.4191448Z - 11928 - Info - Creating provider from binary data file '~App_DataDegrees.mobi-Lite-2012.01.05.dat'.
2012-01-18T11:50:10.7251623Z - 11928 - Info - Created provider from binary data file '~App_DataDegrees.mobi-Lite-2012.01.05.dat'.
задержка намного меньше, чем XML-файл данных (300 мс против 3000мс), но это все еще вызывает заметную задержку.
51Degrees двух проектов.Моби.файлы конфигурации идентичны и в my web.config, это модуль, который я загрузил:
<modules>
<remove name="Detector"/>
<add name="Detector" type="FiftyOne.Foundation.Mobile.Detection.DetectorModule, FiftyOne.Foundation"/>
</modules>
что может быть причиной перезагрузки библиотеки 51Degrees при каждом запросе?
2 ответов
Это происходит потому, что файл журнала находится в папке bin. Всякий раз, когда что-либо изменится в папке bin, рабочий процесс перезапустится. Переместите файл журнала в папку ~/App_Data, и вы обнаружите, что проблема будет решена. Благодарим Вас за использование 51Degrees.mobi.
Я схватил демонстрационное приложение MVC3MobileDect из CodePlex. Я запустил его, используя ASP.NET сервер веб-разработки и IIS Express и не показывают проблемы, с которой вы сталкиваетесь, когда библиотека перезагружает все устройства для каждого запроса на веб-сервер.
кроме того, демонстрационный проект не включал модификацию BrowserCapabilitiesProvider в Application_Start (тем не менее, он все еще работает, даже когда я его добавил).
в этом точка, предполагая, что вы используете версию с открытым исходным кодом, я бы предложил захватить исходный код для сборок Foundation и начать с установки точки останова в
\Foundation\Mobile\Detection\Wurfl\Provider.cs
(вероятно, в InitWurflFiles
метод).
возможно, в стеке вызовов будет что-то, что поможет вам лучше понять, что происходит.
или сравните конфигурацию демонстрационного проекта с вашим веб-приложением.