我有一个MVC 5.x应用程序,它的视图已预先编译并合并到一个程序集中。即使在所有这一切之后,AppDomain启动后对视图的第一个请求很慢,但请求哪个视图并不重要,因为它们在第一次请求视图时都很慢。使用MiniProfiler我可以看到它是" Render"占用大部分时间的视图上的时间以及对视图的额外请求时,渲染时间减少了大约90%。所以要明确的是,这是第一次渲染,正在占用时间。由于所有观点都经过预编译,我不认为这会有点慢,我不相信JIT导致这种大幅减速......任何人都有任何猜测或见解?
请注意,这不是Web应用程序的第一个请求,这是特定视图/页面的第一个请求。例如,对于下面的测试,应用程序已经运行了几个小时并且不断地接受请求,但测试捕获了第一个请求此视图。
第一次请求
第二次请求
答案 0 :(得分:0)
奇怪!然而,为了100%确定究竟发生了什么,我会做以下事情:
我将重定向运行时编译(是的,从那以后就会有一个。) 至少需要编译Global.asax),如下所示:
<system.web>
<compilation debug="true" targetFramework="4.5" tempDirectory="c:\temp\asp.net" />
...
</system.web>
我将调查该文件夹之前和之后的内容 第一次运行。也许拥有原版的副本会更好。
根据您对问题的描述,似乎一切都应该没问题,并且运行之间没有差异。仍然比较前后文件夹的内容可能会发现一些差异。
另一个原因可能是某些缓存,但我猜你已经对它进行了排序。
答案 1 :(得分:0)
显然,视图的渲染并不像我想象的那么简单,因为MVC需要运行几个操作来确定用于动作的确切.cshtml,如果你有任何部分视图等等等等。
我的工作是使用 Razor Generator ,在设计时处理Razor文件而不是运行时。 (如果你想试一试,我建议你首先尝试一下你知道在第一次尝试时加载的观点)。
来自网站:
这样做的一个原因是避免在您的网站上遇到任何运行时命中 启动,因为在运行时没有任何东西可以编译。这可以 在有很多观点的网站中很重要。
实现 Razor Generator 的缺点是您不再需要.cshtml文件:因此,如果要更改视图,则必须重新编译项目。但这不是必然的问题,至少不适合我。
首先从VS扩展库中安装Razor Generator(就像在网站上解释的那样),然后是nuget包。
相信我:你会如此放心,你会哭☺☺