我在線閱讀,當在發佈模式下編譯MVC時,始終使用useCache = true調用IViewEngine接口的FindView和FindPartialView方法。這是真的?如果是這樣,它是MVC中的錯誤嗎?如果它不是一個bug,它背後的推理是什麼?FindView在發佈模式下總是使用useCache = true
1
A
回答
1
是的。這是真的。推理是因爲它使應用程序運行得更快。如果您沒有使用緩存,那麼每次您必須找到您已經找到的視圖時,您必須掃描文件系統以查找與視圖名稱匹配的文件系統。
1
望着VirtualPathProviderViewEngine的構造函數(這是RazorViewEngine基地):
protected VirtualPathProviderViewEngine()
{
if (HttpContext.Current == null || HttpContext.Current.IsDebuggingEnabled) {
ViewLocationCache = DefaultViewLocationCache.Null;
}
else {
ViewLocationCache = new DefaultViewLocationCache();
}
}
人們可以看到,在調試時剃刀確實使用NullLocationCache,但是,如果你檢查ViewEnginesCollection.FindView()和ViewEnginesCollection.FindPartialView(),你會看到視圖在真實和虛假第二次與useCache將搜索曾經與useCache將:
return Find(e => e.FindView(controllerContext, viewName, masterName, true),
e => e.FindView(controllerContext, viewName, masterName, false));
相關問題
- 1. 布爾總是返回true
- 2. debuggable在發佈模式構建中是否爲true?
- 3. 在發佈模式下啓用_CrtDumpMemoryLeaks()
- 4. SerializationException僅在發佈模式下發生
- 5. condition'labelOk = true'總是'true'
- 6. VS2008中的「發佈...」操作是否在「發佈」模式下自動編譯?
- 7. 布爾值在調試模式下比在發佈模式下有所不同
- 8. 在發佈模式下使用QtMultimedia部署Qt應用程序
- 9. 在發佈模式下捕獲NSLog
- 10. 在發佈模式下調試符號
- 11. NLog在發佈模式下IIS7失敗
- 12. rapidJson:在發佈模式下崩潰
- 13. 在發佈模式下使用podfile編譯dlib
- 14. 如何在發佈模式下使用符號構建OpenSSL?
- 15. 僅在發佈模式下使用VS2010編譯時,OutOfMemoryException?
- 16. Debug.Assert是否在發佈模式下生成IL?
- 17. InflateException只是在發佈模式
- 18. 在調試模式和發佈模式下部署
- 19. 在發佈模式/調試模式下雙精度的差異
- 20. 流星:模板總是返回true
- 21. SSL與Rails 3.1:config.force_ssl = true在開發模式下不工作
- 22. ObjectContext在調試模式下公開,在發佈模式下內部
- 23. GCC在調試模式下崩潰,在發佈模式下運行良好?
- 24. 在調試模式下訪問衝突,但在發佈模式下很好
- 25. 消息框在發佈模式下不起作用
- 26. 發佈模式下的編譯錯誤
- 27. 發佈模式下缺少資源
- 28. 我應該在公式中使用什麼布爾值,true,「true」或true()
- 29. 應用程序在調試模式下運行良好,但在發佈模式下引發編譯錯誤
- 30. Trace.WriteLine在發佈模式?
好,這將是有問題的。如果我沒有找到使用緩存的匹配,我應該嘗試在沒有它的情況下找到它。爲什麼會用相同的值調用同一個方法兩次?爲什麼這個工作與Debug模式有什麼不同?首先用true調用它,如果沒有找到,用false調用它。 – 2011-03-04 20:29:36
這與調試/發佈模式無關。 – smartcaveman 2011-03-05 12:14:34
您可以從http://aspnet.codeplex.com/下載ASP.NET MVC的源代碼,以便親自查看。 – smartcaveman 2011-03-05 12:16:04