我在線閱讀,當在發佈模式下編譯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. System.Reflection.MissingRuntimeArtifactException - 在發佈模式下
- 2. 布爾總是返回true
- 3. debuggable在發佈模式構建中是否爲true?
- 4. 布爾在ConfigParser總是返回True
- 5. SerializationException僅在發佈模式下發生
- 6. 使用Microsoft.SqlServer.Dac.DacServices在單用戶模式下發布dacpac
- 7. condition'labelOk = true'總是'true'
- 8. ios對象在調試模式下發布但未在發佈模式下發布
- 9. VS2008中的「發佈...」操作是否在「發佈」模式下自動編譯?
- 10. 布爾值在調試模式下比在發佈模式下有所不同
- 11. 在發佈模式下使用QtMultimedia部署Qt應用程序
- 12. memcpy在發佈模式下的問題
- 13. 在發佈模式下調試符號
- 14. 在發佈模式下捕獲NSLog
- 15. librsvg庫在發佈模式下崩潰
- 16. 在發佈模式下構建nuget包?
- 17. 在發佈模式下調試
- 18. 在發佈模式下的AggregateException
- 19. NLog在發佈模式下IIS7失敗
- 20. rapidJson:在發佈模式下崩潰
- 21. 在發佈模式下使用dotCover發佈運行代碼覆蓋
- 22. #如果DEBUG總是正確的調試和發佈模式
- 23. Android上的JavascriptInterface不能在發佈模式下使用APK
- 24. 在發佈模式下使用podfile編譯dlib
- 25. 僅在發佈模式下使用VS2010編譯時,OutOfMemoryException?
- 26. 在發佈模式下使用QML桌面組件的問題
- 27. 如何在發佈模式下使用符號構建OpenSSL?
- 28. 在「發佈模式」
- 29. 發佈在使用SPenSdk庫的畫布視圖保存模式下的問題
- 30. 發佈在發佈模式下,出版與調試配置
好,這將是有問題的。如果我沒有找到使用緩存的匹配,我應該嘗試在沒有它的情況下找到它。爲什麼會用相同的值調用同一個方法兩次?爲什麼這個工作與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