我们的网络应用程序包含了几十个部分的视图,其中一些是其他的孩子。我们注意到应用程序在第一次加载时速度很慢,初始化它第一次调用的每个视图需要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毫秒,因此没有时间花在寻找文件。
问题:
ps:奇怪的是,相同的视图在应用程序开发开始时加载得更快。
发布于 2015-04-21 14:29:00
您所看到的延迟完全取决于第一次使用时对视图的初始编译。速度将下降到服务器(处理器和驱动器速度,内存,使用等)。
您要么接受它,要么将您的项目设置为预编译视图,以避免在运行时编译。
发布于 2015-04-22 04:32:46
嗯,TrueBlueAussie的答案是正确的,但我有一些补充。
在编译视图时(在应用程序编译期间或以后,取决于项目配置),编译器会创建*..dll,每个包含视图的文件夹一个。当应用程序第一次显示视图时,IIS服务器将加载包含该视图的整个DLL。在这个过程中,您可以很容易地发现它在VS中观察输出窗口,这可能需要一秒钟甚至更长的时间。加载DLL后,将快速呈现位于同一文件夹中的所有其他视图。因此,您拥有的视图文件夹越多,IIS加载它们和花费时间的频率就越高。希望这能有所帮助。
发布于 2015-04-22 05:21:28
我还将补充如下:
Html.RenderPartial("~/Full/Relative/Path/To/View.cshtml", null); 实际上是将html呈现给流。其中as:
var view = ViewEngines.Engines.FindPartialView(
ViewContext.Controller.ControllerContext, "~/Full/Relative/Path/To/View.cshtml");只返回一个IView,它不执行视图。
https://stackoverflow.com/questions/29774981
复制相似问题