Html.RenderPartial很慢

时间:2015-04-21 14:22:09

标签: .net asp.net-mvc razor

我们的网络应用程序包含数十个部分视图,其中一些是其他人的孩子。我们注意到应用程序在第一次加载时变慢,需要0.5到1秒来初始化它第一次调用的每个视图。我追踪时间并发现了这个:

Html.RenderPartial("~/Full/Relative/Path/To/View.cshtml", null);  
即使视图完全为空,

也可能需要大约1秒钟。在同一时间:

var view = ViewEngines.Engines.FindPartialView(
ViewContext.Controller.ControllerContext, "~/Full/Relative/Path/To/View.cshtml");

花费1毫秒,所以没有时间花在寻找文件上 问题:
1.视图编译器花费这么长时间是正常的吗? 2.还有其他方法可以使第一次调用快速但没有在csproj中使用指令预编译视图吗?

ps:奇怪的是,在应用程序开发开始时,相同的视图加载速度更快。

2 个答案:

答案 0 :(得分:7)

您看到的延迟完全取决于首次使用视图的初始编译。速度将降至服务器(处理器和驱动器速度,内存,使用情况等)。

您要么使用它,要么将项目设置为预编译视图以避免在运行时进行编译。

答案 1 :(得分:0)

嗯,TrueBlueAussie的回答是正确的,但我还有一些要补充的内容 在编译视图时(在应用程序编译期间或之后,根据项目配置),编译器会创建* .dll,每个包含视图的文件夹一个。当应用程序第一次显示视图时,IIS服务器将加载包含该视图的整个DLL。在此过程中,您可以轻松地发现它在VS中观看输出窗口,这可能需要一秒甚至更长时间。加载DLL后,快速呈现同一文件夹中的所有其他视图。因此,您拥有的视图文件夹越多,IIS加载它们的次数就越多,并且花费时间。希望这会有所帮助。