Visual Studio的debugging/加载速度非常慢
我有智慧。 Visual Studio的debugging速度通常很慢,或者只是简单的加载(“没有debugging就开始”)我的ASP.NET MVC站点。 并不总是这样:一开始,项目会加载得很好,但是一旦加载速度慢,它们会一直加载。 我可能会等1-2分钟或更长时间。
我的设置:
我目前正在使用Visual Studio 2012 Express ,但在Visual Studio 2010 Express中也遇到了同样的问题。 我的解决scheme存储在networking驱动器上; 特别是,它是我的文档redirect到networking驱动器,如果它很重要。 (不应该,有时候我的网站在这个设置下加载得非常快。)
我通常在Internet Explorer 9中加载,但在Firefox中发生同样的问题。
这可能发生在我工作的任何ASP.NET MVC项目中,似乎围绕着所有ASP.NET MVC项目所做的DisplayTemplates。 如果这很重要的话,那就是C#和Razor。
症状:
系统会加载我的符号数百次。 基本上如下,但是至less有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。 因此,超长的延误。
我试过的东西:
- debugging或发布版本,没关系。
- 将我的项目放在Web服务器上完整的IIS实现上运行速度非常快,没有任何问题。
- 卡西尼,IIS Express 7.5和IIS Express 8.0都有问题。
- 删除所有断点不做任何事情。
- Clean Solution ,或者删除.suo也什么也不做。
- 如果我修复了IIS Express,或者删除了
My Docs\IISExpress
文件夹,或者修复/重新安装了Visual Studio→问题可能会消失,但是只会持续一段时间。
任何build议都是值得赞赏的。
要回答更多的问题,是的,我的机器肯定有马力。 真气的事情是,同样的项目,没有任何改变,有时可以加载非常非常快,通常是在我修复IIS Express和删除My Docs\IISExpress
文件夹。 最终“事情”发生,并且再次加载到2分钟。 我正在做的不是一个复杂的项目。 没有外部库或依赖关系,我的VS.NET没有插件。
值得注意的是,这台机器拥有Symantec Endpoint Protection,它有造成严重破坏的历史。 但彻底禁用它(成为pipe理员很好)没有解决问题。
我现在有一个理论。 我想这是因为我正在closuresnetworking共享的redirect文件夹。 当debugging器正在经历数百个“加载符号”行时,我停下来看看它在做什么。 这是在我的代码,加载我有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编译文件,将其保存到networking共享中,networking共享然后以某种方式标记新的时间,然后Visual Studio认为文件已经更改,从而Visual Studio再次重新编译它。 只有一个理论, 我真的不知道。
一个,显然我有离线文件(这是一个办公室的桌面电脑,我不在乎)。 我要去禁用,重启,明天重试。
另外,将我的项目按原样移到本地C:修复它。 它加载速度非常快。 但这在工作环境中并不理想。 我失去了以前的版本,我的代码根本没有备份,除非我手动复制它,它不再与任何人共享。
如果涉及到,我可以把它从C复制到networking共享。 对于每个页面加载等待两分钟更麻烦。
下面是我如何解决Visual Studio 2012中的“缓慢的符号加载”问题:
-
进入工具 – >选项 – >debugging – >常规
-
检查“启用我的代码”旁边的复选标记。
-
转到工具 – >选项 – >debugging – >符号
-
点击“…”button,并在本地计算机的某处创build/select一个新文件夹,以存储caching的符号。 我命名我的“符号caching”,并把它放在文档 – > Visual Studio 2012中。
-
点击“加载所有符号”,然后等待从微软服务器上下载这些符号,这可能需要一段时间。 请注意,加载所有符号button仅在debugging时可用。
-
请取消选中“Microsoft Symbol Servers”旁边的checkbox,以防止Visual Studio远程查询Microsoft服务器。
-
点击“确定”。
从现在起,符号加载应该快得多。
请注意,如果您对Microsoft程序集进行了任何更改/下载,则可能需要重新进入“符号”对话框和“加载所有符号”。
closuresintelliTrace为我解决了这个问题。
在Visual Studio中,工具 – >选项 – > IntelliTrace
然后,取消选中“启用IntelliTrace”checkbox。
这一切都没有为我工作,但我发现一个符号被删除的断点。 似乎2010年挂在上面。 要查看这是否是你的问题,请执行debug-> windows-> breakpoints如果有任何在那里删除它们。
桑德斯说,他检查了,但没有提到这个问题的解决scheme。 也许一些知识,但不是我们所有人。
我删除了“Temporary ASP.NET Files”文件夹,我的localhost页面加载速度大大提高。 这里是path…%temp%\ Temporary ASP.NET Files \
我想我可能最终至less知道原因,虽然不是原因。 当问题再次发生时,我注意到一大堆“conhost.exe”进程成为孤儿。 我会closuresVisual Studio,他们将保持开放。 终于结束了每个任务,可靠地解决了这个问题。 [希望]
(请注意,conhost.exe并不是Visual Studio的一个进程,因为其他用户可能有其他运行conhost.exe的应用程序,我知道我的机器不是这个原因,安全地结束任务,除了YMMV之外。)
至于为什么发生这种情况? 当我一次打开多个项目时,似乎会发生这种情况,我经常这样做,尽pipe我只是随时build立和debugging其中的一个。
编辑#1 – 不幸的是这不是一个“银弹”。 它并不总是为我工作。 通常情况下,当事情变得缓慢,我只closures所有的Visual Studio会话,然后进入任务pipe理器,并结束它的任何实例,conhost.exe,iisexpress.exe Microsoft.VisualStudio.Web.Host.exe和MSBuild.exe我可以find。
通常,在那之后,当我重新启动我的项目时,它会很快加载。 但并不总是。
真的,我认为最好的行动方式可能不是build立和debuggingredirect的文件夹/networking共享代码。
编辑#2 – 两年后,这仍然是我在Visual Studio社区2013年的问题,但我似乎至lessfind罪魁祸首的任务: Explorer.exe 。 是的,谁知道。 当我结束这个任务的时候,bam,页面会在一秒钟内加载。
如果我有一个Windows资源pipe理器文件浏览器打开我的redirectnetworking驱动器(这往往是因为这是我的代码),这个问题似乎发生。 closures窗口是不够的,我必须杀死整个Explorer.exe任务。 我只能猜测它在做什么…与文件句柄坚果?
我通常可以使用任务pipe理器来启动一个新的explorer.exe任务(我只能采取这么多的ALT键),Visual Studio将继续加载好和快速。 但是,如果我再次打开Windows资源pipe理器,它几乎总是会回到超慢模式。
所以,如果你有一个redirect的networking共享,给它一个镜头。 肯定会在当地工作。
你有没有启用FusionLog?
我的VisualStudio启动非常慢,开始debugging时打开解决scheme并加载符号。 它只在我的机器上很慢,而在其他机器上却没有。
FusionLog将大量日志信息写入磁盘。 只是禁用RegEdit解决了一切,在我的情况。
这是registry上的FusionLog密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
检查ForceLog值(1启用,0禁用)。
对我来说,它是IE 9.08.8112.16241。 只要使用Firefox或Chrome,F10或F11就不会出现缓慢的debugging。 我不知道IE的问题是什么,但我现在正式鄙视使用它进行testing。
更新:我已closures所有的IE程序加载项,并恢复到全速。 一次一个地打开它,透露LastPass(在我的情况下)是罪魁祸首。 我想我毕竟不会责怪MS。
以上都是很好的解决scheme,我尝试了所有的解决scheme,但在这里得到了解决scheme
Debug -> Delete All Breakpoints
我遇到了同样的问题,并尝试了上面的大部分解决scheme。 简单地删除caching和临时文件最终为我工作。
尝试删除这两个文件夹的内容:
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
文件夹并使用以下内容,可以将其设置为在loginWindows时自动发生:
rmdir C:\Users\\{username}\AppData\Local\Microsoft\WebsiteCache /s /q rmdir C:\Users\\{username}\AppData\Local\Temp /s /q
我也有执行perfomancedebugging也麻烦,我尝试了很多选项的debugging器。 在我的情况下,当我改变这个选项时,实现了巨大的性能:
工具 – 选项 – debugging – 输出窗口 – (通用输出设置 – 所有debugging输出) – 关
在我的情况下,它是VS 2012的.NET Reflector Visual Studio扩展(版本8.3.0.93)。debugging每个Step Over (F10)需要10秒钟。
在Visual Studio中,转至工具/扩展和更新…并禁用.NET Reflector Visual Studio扩展 。 不要忘记重新启动Visual Studio。
对我来说,我实现了这个技巧 ,通过将以下两个属性添加到web.config中的编译标签中,从而大大提高了性能
<compilation ... batch="false" optimizeCompilations="true"> ... </compilation>
batch =“false”是做什么的?
通过仅编译已更改并需要重新编译的页面,使预编译更具select性
优化编译究竟在做什么? 资源
ASP.NET使用每个应用程序哈希代码,其中包括许多事情的状态,包括bin和App_Code文件夹,以及global.asax。 每当ASP.NET应用程序域启动时,它就会检查这个哈希码是否与之前计算的内容相比发生了变化。 如果有的话,那么整个codegen文件夹(编译和阴影复制程序集所在的地方)就被清除了。
当优化打开时(通过optimizeCompilations =“true”),散列不再考虑bin,App_Code和global.asax。 因此,如果这些改变,我们不会消除codegen文件夹。
参考: msdn上的编译元素
当“Native Code”debugging器启用时,我遇到了缓慢的Visual Studiodebugging问题。 尝试禁用它。
在“Visual Studio 2012”上:
- 项目属性 – >
- 网页 – >
- debugging器(页面底部)。 – >
- 禁用除ASP.NET以外的所有
希望它有帮助。
类似的问题: 1,2
我不知道你是否仍然有这个问题,但我通过将debugging器附加到进程本身而不是让VS为我做,而我发现它大大改善了时间,在Visual Studio中debugging网站。 我使用了一个名为AttachTo的VS扩展,我有一个关于如何在这里使用它的小文章。
我希望这有帮助。
有一次,在停电之后,每当断点被触发或exception被抛出时,我都必须面对相同的缓慢问题。
我有一个模糊的记住,“suo”文件(与“sln”解决scheme文件在同一个目录中)可能会损坏,并使一切放缓。
我删除了我的“suo”文件,一切正常。 .suo文件删除是无害的,只意味着重新创build我的Windows布局加上开始的项目和一些其他非关键的定制。
在我的情况是这样的
Tools/Options/Debugging/General/Enable JavaScript debugging for ASP.NET (Chrome and IE)
一旦我没有选中这个,我的debugging开始从45-60秒下降到0-5秒。
我也面临这个问题,下面是我执行的步骤,它总是对我有用:
- 删除解决scheme的.suo文件。
- 删除临时ASP.NET文件 (可以在%WINDOW%\ Microsoft.NET \ Framework \\ Temporary ASP.NET Files中find它)
- 删除应用程序中的所有断点。
我的缓慢VS问题通过禁用浏览器链接解决
如果有人注意到这个行为来自左边的字段,请检查以确保您没有在web.config中设置任何断点。 我必须设置一个鼠标点击,这确实减慢了所有的debugging操作。
花了整整一天的时间等待符号加载速度像乌龟一样慢,混合和切换所有可能的组合: 只是我的代码,caching符号 , Intellitrace ,实时, 杀死进程等。
我的解决scheme实际上是禁用防病毒 。 是的,Windows Defender正在放缓我的项目启动! 它会检查所有的DLL作为Visual Studio的要求,并放慢整个符号加载过程。
我不得不说,我们的机器有非常好的规格来编译解决scheme,所以这绝对不是问题。 我们在VS 2013旗舰版中编码。
清空符号caching为我工作。
请参阅:菜单栏/工具/选项/debugging/符号/空符号caching
类似的问题浪费了我一天的一半!
由于我的问题的解决scheme是不同于这里所说的,我会发布它,所以它可能会帮助别人。
我的是一个断点。 我有一个“断点function”断点(即代替在代码行上按F9,我们使用断点窗口创build它们),这应该停止在我的项目外的库函数中。
我有“使用智能感知validation函数名 ”CHECKED。 (信息在这里 )
这就像地狱一样慢下来(项目启动从2秒到5分钟)。
消除破发点解决了它的好处。
完成上述所有工作后,有一件事情是:
在Threads窗口(Debug-> Windows-> Threads)中,将Group by设置为None。 这只能在debugging时完成。
即使在closures这个窗口之后,这也会产生影响。
在我的情况下,我注意到禁用我的互联网连接将使其运行速度与CTRL-F5一样快,所以我去debugging – >选项 – >符号,只是取消选中所有的.pdb位置。
似乎VS每次启动debugging会话都试图连接到这些服务器。
请注意,禁用debugging – >选项 – >debugging – >常规“启用源支持”或“要求源文件完全匹配原始版本” 没有任何区别。
部分视图中还有一些复杂的情况,即页面上出现错误而无法立即识别。 像Model.SomeValue而不是Model.ThisValue。 它可能不会强调并导致debugging问题。 这可能是一个真正的难题。
在Visual Studio中:
工具 – >选项 – >debugging – >符号
select“只有指定的模块”。 点击“指定模块”链接,并添加一个空白模块(点击新文档button,然后点击确定)。
在Windows资源pipe理器中打开解决scheme文件夹,closuresVisual Studio,从Windows资源pipe理器中删除.suo文件。
现在在Visual Studio中打开项目,希望debugging器能够快速地附加/分离。
对于我来说,问题是当您为同一个项目打开多个选项卡时,“浏览器链接”function非常繁重!
因为每次我们启动项目,它都会打开一个浏览器链接通讯的新标签。
只需closures与项目相关的所有选项卡,并保持一个打开!
这个免费的瞬间视觉工作室! 这是魔法 ! 😉
“自从Visual Studio 2013开始,Browser Link是一个function,它在开发环境和一个或多个Web浏览器之间创build了一个通信通道。 您可以使用浏览器链接一次在多个浏览器中刷新您的Web应用程序,这对于跨浏览器testing非常有用。“
请确保您没有以pipe理员模式打开Visual Studio
我面临这个问题,不得不以正常模式运行。
对我来说,这是有条件的断点。 那些似乎真的放慢了速度。