Visual Studio 調試/載入非常慢
我無計可施。Visual Studio通常調試起來非常緩慢,或者只是簡單地載入(“不調試就開始”)我的 ASP.NET MVC 站點。並非總是如此:起初,項目會載入得又快又好,但一旦載入緩慢,之後它們總是會載入緩慢。我可能要等 1-2 分鐘或更長時間。
我的設置:
我目前正在使用Visual Studio 2012 Express,但我在 Visual Studio 2010 Express 中也遇到了同樣的問題。我的解決方案儲存在網路驅動器上;具體來說,如果重要的話,它會將我的文件重定向到網路驅動器。(不應該。有時我的網站在此設置下載入速度非常快。)
我通常在 Internet Explorer 9 中載入,但在 Firefox 中也會出現同樣的問題。
這可能發生在我從事的任何 ASP.NET MVC 項目中,並且它似乎圍繞著 DisplayTemplates,這是我所有的 ASP.NET MVC 項目所做的。如果這很重要,那就是 C# 和 Razor。
症狀:
系統將載入我的符號數百次。基本上如下,但至少有 300 行這樣的行,每行都有用於相同 CSHTML 的略有不同的 DLL 文件:
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded. 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded. 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded. 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded. 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded. 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.在上面,我有三個 DisplayTemplate:“Contact”、“Location”和“StatusCode”。每次呼叫顯示模板時,IIS 似乎都會載入符號兩次。因此,如果我要顯示一個包含 100 個條目的表格,這些條目呼叫所有這三個顯示模板,則載入了 600 個單獨的符號。
這也不是一個快速的操作。IIS 生成的日誌文件大約需要 200 毫秒才能載入每個符號。因此,超長延遲。
我試過的:
- Debug 或 Release 版本,沒關係。
- 將我的項目放在 Web 伺服器上的完整 IIS 實現上,執行速度非常快,沒有任何問題。
- Cassini、IIS Express 7.5 和 IIS Express 8.0 都有這個問題。
- 刪除所有斷點什麼都不做。
- Clean Solution或刪除 .suo 也無濟於事。
- 如果我修復 IIS Express,或刪除
My Docs\IISExpress文件夾,或修復/重新安裝 Visual Studio → 問題可能會消失,但只會持續一段時間,然後才會再次出現。任何建議都值得讚賞。
要回答更多問題,是的,我的機器肯定有馬力。令人憤怒的是,同一個項目,沒有任何改變,有時可以很快載入,通常是在我修復 IIS Express 並刪除
My Docs\IISExpress文件夾之後。最終,“某事”發生了,再次載入只需 2 分鐘。我正在做的不是一個複雜的項目。沒有外部庫或依賴項,我的 VS.NET 也沒有任何附加組件。值得注意的是,這台機器有 Symantec Endpoint Protection,它有造成嚴重破壞的歷史。但是完全禁用它(成為管理員很好)並沒有解決問題。
在這一點上,我有一個理論。我認為這完全是因為我正在處理網路共享的重定向文件夾。當調試器檢查它的數百個“載入符號”行時,我停下來看看它在做什麼。它在我的程式碼中,載入了我擁有的 DisplayTemplate。進入模板輸出:
Step into: Stepping over non-user code 'System.Threading.WaitHandle.InternalWaitOne' Step into: Stepping over non-user code 'System.Threading.WaitHandle.WaitOne' Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated' Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCapture' Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch' Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch' Step into: Stepping over non-user code 'System.Web.Compilation.AssemblyBuilder.Compile' 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.bciuyg14.dll', Symbols loaded. Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.CompileWebFile' Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultInternal' Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert' Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory' Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists' Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName' Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView' Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.Find' Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.FindPartialView' Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.ActionCacheViewItem.Execute' 'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.kwj3uqan.dll', Symbols loaded. Step into: Stepping over non-user code 'System.RuntimeType.CreateInstanceSlow' Step into: Stepping over non-user code 'System.Web.Mvc.DependencyResolver.DefaultDependencyResolver.GetService' Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create' Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerCompiledView.Render'看起來 Visual Studio每次呼叫它時都會重新編譯我的顯示模板,這又是數百次。我的理論是 Visual Studio 編譯文件,將其保存到網路共享,然後以某種方式在其上標記新時間,然後 Visual Studio 認為文件已更改。因此,Visual Studio 再次重新編譯它。雖然只是一個理論;我真的一點頭緒都沒有。
一方面,顯然,我有離線文件(這是辦公室裡的台式電腦;我不在乎)。我將禁用,重新啟動,然後明天重試。
另外,將我的項目按原樣移動到本地 C: 可以修復它。它載入非常快。但這在工作環境中並不理想。我失去了以前的版本,我的程式碼根本沒有備份,除非我手動複製它,而且它不再與任何人共享。
如果涉及到它,我可以將它從 C 來回複製到網路共享。每次頁面載入等待兩分鐘更煩人。
以下是我在 Visual Studio 2012 中解決“符號載入緩慢”問題的方法:
- 轉到工具 -> 選項 -> 調試 -> 正常
- 選中“僅啟用我的程式碼”旁邊的複選標記。
- 轉到工具 -> 選項 -> 調試 -> 符號
- 點擊“…”按鈕並在本地電腦上的某處創建/選擇一個新文件夾以儲存記憶體的符號。我將我的命名為“符號記憶體”並將其放入 Documents -> Visual Studio 2012。
- 點擊“載入所有符號”並等待從 Microsoft 的伺服器下載符號,這可能需要一段時間。請注意,載入所有符號按鈕僅在調試時可用。
- 取消選中“Microsoft 符號伺服器”旁邊的複選標記,以防止 Visual Studio 遠端查詢 Microsoft 伺服器。
- 點擊“確定”。
從現在開始,符號載入應該更快。
請注意,如果您對 Microsoft 程序集進行任何更改/下載,您可能需要返回“符號”對話框並再次“載入所有符號”。