添加51Degrees移动检测库后,我的ASP.NET MVC 3项目的爬网速度变慢了。 <log logFile="~/bin/App_Data/51Log.txt" logLevel="Info" />部分中的<fiftyOne>定义的51Degrees日志文件显示为每个请求重新加载了设备库,为每个请求增加了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

此外,在web.config中设置<fiftyOne> <log ... logLevel="Debug">会在启动时引发以下异常:
Storage scopes cannot be created when _AppStart is executing.

MVC 4更新

如果我创建一个空白的ASP.NET MVC 4应用程序并添加最新的51Degrees 2.0.3.2 NuGet程序包,那么一切将正常运行。正如预期的那样,该日志反射(reflect)了尽管有多个请求,二进制数据也仅被加载了一次(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数据文件(300ms与3000ms),但仍会引起明显的延迟。

这两个项目的51Degrees.mobi.config文件是相同的,在我的web.config中,这是我已加载的模块:
<modules>
    <remove name="Detector"/>
    <add name="Detector" type="FiftyOne.Foundation.Mobile.Detection.DetectorModule, FiftyOne.Foundation"/>
</modules>

是什么导致51Degrees库在每个请求上重新加载?

最佳答案

发生这种情况是因为日志文件位于bin文件夹中。只要bin文件夹中发生任何更改,工作进程就会重新启动。将日志文件移至〜/App_Data文件夹,您将发现问题已解决。感谢您使用51Degrees.mobi

10-06 14:22