第一次浏览器请求对Mono XSP托管的Web应用程序造成巨大延迟

时间:2011-11-16 12:38:47

标签: asp.net-mvc asp.net-mvc-3 mono embedded-linux xsp

我们正在使用Mono(2.10)XSP4网络服务器来托管在开放式嵌入式Linux(ARM)上运行的ASP.Net MVC3 Web应用程序。启动XSP4时,它需要几秒钟才能准备好并接受请求。到目前为止没问题。

但是当浏览器/网站访问者的第一个请求被使用时,XSP4使用所有CPU,它可以获得大约55秒,直到网页浏览器(成功)显示。每次启动/重启XSP后都会发生这种情况。

我的第一个想法是,这是整个网络应用程序的及时编译。所以我构建了一个只包含二进制文件,.css,.js和视图(.cshtml)的部署包。它起作用但仍然有这么大的延迟。

然后我尝试使用Visual Studio预编译该Web应用程序(如一些Mono发行说明中所述)。该网站再次运作良好,但仍存在巨大延迟。

实际上在我脑海中的一些问题:

  1. 有人知道第一个浏览器请求进入时XSP网络服务器正在做什么吗?这是即时编译,即使它是一个预编译的Web应用程序吗?
  2. 为什么每次重新开始后都会这样做?
  3. 一般可以以某种方式减少巨大的延迟吗?
  4. 是否可以减少巨大的延迟,因此只有在Web应用程序更新后(在后续的XSP运行之间缓存)才能在第一个浏览器请求中完成?
  5. 任何帮助/想法都会很棒。

    更新:同时我发现延迟是由Mono / ASP.Net编译器构建的dcms和将MVC3 razor视图编译成/tmp/root-aspnet.../引起的映射到内存,因此不是持久的。我现在正在寻找一种方法来控制XSP4 / Mono.WebServer / Mono-Asp.Net存储这些编译文件的位置。如果有人熟悉这个,请告诉我; - )

2 个答案:

答案 0 :(得分:1)

这可能是本机编译开销(与预编译不同)。您可以检查AOTing the system libraries是否为您提供加速:

mono --aot /usr/lib/mono/1.0/mscorlib.dll
for i in /usr/lib/mono/gac/*/*/*.dll; do mono --aot $i; done

答案 1 :(得分:0)

为防止Rasberry在每次启动XSP4时编译您的网站,您必须使用aspnet_compiler.exe预编译您的网站,并位于%WINDIR%\Microsoft.NET\Framework\v4.0.30319文件夹中。

以下是一个例子:

aspnet_compiler.exe -p "d:\original website" -v / -c "d:\compiled website"

编译完网站后,将其上传到您的Rasberry,XSP / mono将使用您网站的编译版本。您的第一个请求会快得多。

以下是一些参考链接:

Precompiling Your Website (C#)

ASP.NET Compilation Tool (Aspnet_compiler.exe)