发布模式下的FindView始终使用useCache = true

时间:2011-03-04 04:27:51

标签: asp.net-mvc asp.net-mvc-3

我在网上看到,当MVC在发布模式下编译时,IViewEngine接口的FindView和FindPartialView方法总是用useCache = true调用。这是真的?如果是,它是MVC中的错误吗?如果它不是一个bug,背后的原因是什么?

2 个答案:

答案 0 :(得分:2)

是。这是真的。原因是它使应用程序运行得更快。如果您没有使用缓存,则每次必须找到已找到的视图时,您必须扫描文件系统以查找与视图名称匹配的内容。

答案 1 :(得分:2)

查看VirtualPathProviderViewEngine的构造函数(它是RazorViewEngine的基础):

   protected VirtualPathProviderViewEngine() 
   {
        if (HttpContext.Current == null || HttpContext.Current.IsDebuggingEnabled) { 
            ViewLocationCache = DefaultViewLocationCache.Null;
        }
        else {
            ViewLocationCache = new DefaultViewLocationCache(); 
        }
    } 

可以看到,虽然调试Razor确实使用了NullLocationCache,但是,如果你检查ViewEnginesCollection.FindView()和ViewEnginesCollection.FindPartialView(),你会看到使用useCache在true和第二次搜索视图一次useCache in false:

        return Find(e => e.FindView(controllerContext, viewName, masterName, true),
                    e => e.FindView(controllerContext, viewName, masterName, false));