asp.net mvc - vs2015 - Visual Studio的調試/加載速度非常慢




vs2015 debug (20)

對於我來說,問題是當您為同一個項目打開多個選項卡時,“瀏覽器鏈接”功能非常繁重!

因為每次我們啟動項目時,都會打開一個帶有瀏覽器鏈接通信的新選項卡。

只需關閉與該項目相關的所有選項卡,並保持只打開一個!

這個免費的瞬間視覺工作室! 這是魔法 ! ;-)

“自從Visual Studio 2013開始,Browser Link是一項功能,它在開發環境和一個或多個Web瀏覽器之間創建了一個通信通道。 您可以使用瀏覽器鏈接一次在多個瀏覽器中刷新您的Web應用程序,這對跨瀏覽器測試非常有用。“

我很有智慧。 Visual Studio的調試速度通常很慢,或者只是簡單加載(“無需調試就開始”)我的ASP.NET MVC站點。 並非總是如此:首先,這些項目的加載速度會很快,但一旦加載速度變慢,它們會在這之後始終加載速度較慢。 我可能會等待1-2分鐘或更長時間。

我的設置:

目前,我正在使用Visual Studio 2012 Express ,但我在Visual Studio 2010 Express中也遇到了同樣的問題。 我的解決方案存儲在網絡驅動器上; 特別是,它是我的文檔重定向到網絡驅動器,如果它很重要。 (不應該,有時候我的網站在這個設置下加載非常快。)

我通常在Internet Explorer 9中加載,但Firefox中出現同樣的問題。

這可能發生在我工作的任何ASP.NET MVC項目中,而且似乎圍繞著所有ASP.NET MVC項目所做的DisplayTemplates。 如果這很重要的話,那就是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.

在上面,我有三個DisplayTemplates:“Contact”,“Location”和“StatusCode”。 看來每次調用displaytemplate時,IIS都會加載符號兩次。 因此,如果我正在顯示一個包含所有三個這些顯示模板的100個條目的表格,則會加載600個單獨的符號。

這也不是一個快速的操作。 查看IIS生成的日誌文件,每個符號加載大約需要200 ms。 因此,超長的延誤。

我試過的東西:

  • 調試或發布版本,沒關係。
  • 將我的項目放在Web服務器上的完整IIS實現上運行速度非常快,沒有任何問題。
  • 卡西尼,IIS Express 7.5和IIS Express 8.0都有問題。
  • 刪除所有斷點不做任何事情。
  • 清理解決方案 ,或刪除.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重新編譯我的displaytemplate 每次它的調用,這再次,數百次。 我的理論是,Visual Studio編譯文件,將其保存到網絡共享中,然後網絡共享以某種方式在它上面標記新的時間,然後Visual Studio認為文件已更改,因此Visual Studio再次重新編譯它。 只有一個理論; 我真的不知道。

其中之一,顯然我有離線文件(這是一個辦公室的桌面電腦;我不在乎)。 我將要禁用,重啟並在明天重試。

另外,將我的項目按原樣移到本地C:修復它。 它加載速度非常快。 但這在工作環境中並不理想。 我失去了以前的版本,我的代碼根本沒有備份,除非我手動複製它,並且它不再與任何人共享。

如果涉及到它,我可以將它從C複製到網絡共享。 每頁加載等待兩分鐘更煩人。


請確保您沒有以管理員模式打開Visual Studio

我面臨這個問題,不得不以正常模式運行。


以上都是很好的解決方案,我嘗試了所有的解決方案,但是在here得到了解決方案,這就是

Debug -> Delete All Breakpoints

在Visual Studio中:

工具 - >選項 - >調試 - >符號

選擇“僅限指定模塊”。 點擊“指定模塊”鏈接,並添加一個空白模塊(點擊新文檔按鈕並點擊確定)。


在我的情況下,我注意到禁用我的互聯網連接將使其運行速度與ctrl-f5一樣快,所以我去調試 - >選項 - >符號,只是取消選中所有.pdb位置。

似乎VS每次啟動調試會話時都試圖連接到這些服務器。

請注意,禁用調試 - >選項 - >調試 - >常規“啟用源支持”或“要求源文件完全匹配原始版本” 不會有任何區別。


在我的情況是這樣的

Tools/Options/Debugging/General/Enable JavaScript debugging for ASP.NET (Chrome and IE)

一旦我沒有選擇這個,我的調試開始從45-60秒降到0-5秒。


完成上述所有工作之後,有一件事情是:
在Threads窗口(Debug-> Windows-> Threads)中,將Group by設置為None。 這只能在調試時完成。

即使在關閉該窗口後,這也會產生影響。


對我來說,它是IE 9.08.8112.16241。 只要我使用Firefox或Chrome,F10或F11就沒有緩慢的調試。 我不知道IE的問題是什麼,但我現在正式鄙視使用它進行測試。

更新:我已關閉所有IE程序加載項,並恢復到全速。 一次一個地打開它,發現LastPass(在我的情況下)是罪魁禍首。 我想我畢竟不會責怪MS。


對於我來說,我實現了這個技巧 ,通過在web.config中將以下兩個屬性添加到編譯標記中,從而大幅度提高了性能

<compilation ... batch="false" optimizeCompilations="true"> ... </compilation>

batch =“false”是做什麼的?

它通過僅編譯已更改且需要重新編譯的頁面,使預編譯更具選擇性

優化編譯究竟在做什麼? Source

ASP.NET使用每個應用程序哈希代碼,其中包括許多事情的狀態,包括bin和App_Code文件夾以及global.asax。 每當ASP.NET應用程序域啟動時,它都會檢查此散列碼是否與之前計算的內容相比發生了變化。 如果有,則整個codegen文件夾(編譯和陰影複製程序集在此處)將被清除。

當優化打開時(通過optimizeCompilations =“true”),散列不再考慮bin,App_Code和global.asax。 因此,如果這些改變,我們不會清除codegen文件夾。

參考: msdn上的編譯元素


就我而言,它是VS 2012中的.NET Reflector Visual Studio Extension(版本8.3.0.93)。每次Step Over (F10)都需要10秒的調試時間。

在Visual Studio中,轉到工具/擴展和更新...並禁用.NET Reflector Visual Studio擴展 。 不要忘記重新啟動Visual Studio。


我不知道你是否仍然遇到這個問題,但是我通過將調試器附加到進程本身而不是讓VS為我做,並且我發現它可以大大縮短時間,從而在Visual Studio中調試網站。 我使用VS的擴展名為AttachTo,我有一篇關於如何here使用它的小文章。

我希望這有幫助。


我也面臨這個問題,下面是我執行的步驟,它始終對我有用:

  • 刪除解決方案的.suo文件。
  • 刪除臨時ASP.NET文件 (可以在%WINDOW%\ Microsoft.NET \ Framework \\ Temporary ASP.NET Files中找到它)
  • 刪除應用程序中的所有斷點。

我在調試時也遇到了執行性能問題,我嘗試了很多調試器選項。 在我改變這個選項的時候,實現了巨大的性能:

工具 - 選項 - 調試 - 輸出窗口 - (通用輸出設置 - 所有調試輸出) - 關


我想我可能最終至少知道原因,儘管不是原因。 當問題再次發生時,我注意到有大量的“conhost.exe”進程被孤立。 我會關閉Visual Studio,它們將保持打開狀態。 終於完成每個任務,可靠地解決了這個問題。 [希望]

(請注意,conhost.exe不是Visual Studio的一個進程,雖然Visual Studio使用它,所以其他用戶可能有其他運行conhost.exe的應用程序,我知道我的機器不是這個原因安全地結束任務,除了YMMV之外)。

至於為什麼發生這種情況? 當我一次打開多個項目時,似乎會發生這種情況,我傾向於經常這樣做,即使我只是隨時構建和調試其中的一個。

編輯#1 - 不幸的是這不是一個“銀彈”。 它並不總是為我工作。 通常,當事情變得緩慢時,我只關閉所有的Visual Studio會話,然後進入任務管理器並結束它的任何實例,conhost.exe,iisexpress.exe,Microsoft.VisualStudio.Web.Host.exe和MSBuild.exe我可以找到。

通常,之後,當我重新啟動我的項目時,它會很快加載。 但不總是。

真的,我認為最好的行動方案可能不是從重定向的文件夾/網絡共享構建和調試代碼。

編輯#2 - 兩年後,這仍然是我在Visual Studio Community 2013中的一個問題,但我似乎至少找到了罪魁禍首任務: Explorer.exe 。 是的,誰知道。 當我結束那項任務時,bam,頁面會在一秒鐘內加載。

如果我的Windows資源管理器文件瀏覽器對我的重定向網絡驅動器打開(這通常是我的代碼所在的地方),似乎會出現此問題。 關閉窗口是不夠的,我必須殺死整個Explorer.exe任務。 我只能猜測它在做什麼......用文件句柄搞瘋了?

我通常可以使用任務管理器來啟動一個新的explorer.exe任務(我只能採取這麼多的alt-tabbing),並且Visual Studio將繼續加載得很好並且很快。 但是,如果我再次打開Windows資源管理器,它幾乎總是會回到超慢鏡頭。

所以,如果你有一個重定向的網絡共享,請給它一個鏡頭。 它肯定會在當地工作。


我遇到了同樣的問題,並嘗試了上述大部分解決方案。 簡單地刪除緩存和臨時文件最終為我工作。

嘗試刪除這兩個文件夾的內容:

C:\Users\\{UserName}\AppData\Local\Microsoft\WebsiteCache

C:\Users\\{UserName}\AppData\Local\Temp (特別是iisexpress和Temporary ASP.NET Files文件夾)。

通過將cmd文件添加到C:\Users\\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup文件夾並使用以下內容,可以設置為在登錄Windows時自動發生:

rmdir C:\Users\\{username}\AppData\Local\Microsoft\WebsiteCache /s /q

rmdir C:\Users\\{username}\AppData\Local\Temp /s /q

有一次,在停電之後,每次遇到斷點或引發異常時,我都必鬚麵對相同的緩慢問題。

我有一個模糊的記憶,即“suo”文件(與“sln”解決方案文件位於同一目錄中)可能會損壞並使所有內容都變慢。

我刪除了我的“suo”文件,一切正常。 .suo文件刪除是無害的,只意味著重新創建我的Windows佈局加上開始的項目和一些其他非關鍵定制。


“Native Code”調試器被啟用時,我遇到了緩慢的Visual Studio調試問題。 嘗試禁用它。

在“Visual Studio 2012”上,請轉到:

  1. 項目屬性 - >
  2. 網頁 - >
  3. 調試器(頁面底部)。 - >
  4. 禁用除ASP.NET外的所有內容

希望能幫助到你。

類似的問題: 2


花了整整一天的時間等待符號加載速度像烏龜速度一樣慢,混合併在所有可能的組合之間切換: 只是我的代碼,緩存符號Intellitrace ,實時, 殺死進程等。

我的解決方案實際上是禁用防病毒 。 是的,Windows Defender正在放緩我的項目啟動! 它將在Visual Studio請求它們時檢查所有dll,並放慢整個符號加載過程。

我不得不說我們的機器有很好的規格來編譯解決方案,所以這絕不是問題。 我們在VS 2013旗艦版中編碼。


部分視圖中還有一些複雜情況,即頁面上有錯誤無法立即識別。 像Model.SomeValue而不是Model.ThisValue。 它可能不會強調並導致調試問題。 這可能是一個真正的難題。


關閉intelliTrace為我解決了這個問題。

在Visual Studio中,工具 - >選項 - > IntelliTrace

然後,取消選中“啟用IntelliTrace”複選框。







cassini