首页 文章

Visual Studio调试/加载速度很慢

提问于
浏览
440

我斗智斗勇 . Visual Studio通常很难调试或只是简单地加载("start without debugging")我的ASP.NET MVC站点 . 并非总是如此:首先,项目将加载得很好而且速度很快,但是一旦它们加载缓慢,它们总是会在此之后加载缓慢 . 我可以等1-2分钟或更长时间 .

My setup:

我目前正在使用Visual Studio 2012 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.

在上面,我有三个DisplayTemplates:“Contact”,“Location”和“StatusCode” . 似乎IIS每次调用displaytemplate时都会加载符号两次 . 因此,如果我显示一个包含100个条目的表,这些条目调用所有这三个displaytemplate,则加载600个单独的符号 .

这也不是一个快速的操作 . 查看IIS生成的日志文件,每个符号加载大约需要200毫秒 . 因此,超长延迟 .

What I've Tried:

  • 调试版或发布版,没关系 .

  • 将我的项目放在Web服务器上的完整IIS实现上可以非常快速地运行它,没有任何问题 .

  • Cassini,IIS Express 7.5和IIS Express 8.0都有问题 .

  • Delete All Breakpoints does nothing.

  • Clean Solution,或删除.suo也什么都不做 .

  • 如果我修复IIS Express,或删除 My Docs\IISExpress 文件夹,或修复/重新安装Visual Studio→问题可能会消失,但只会暂时消失,然后再回来 .

任何建议都表示赞赏 .

要回答更多问题,是的,我的机器肯定有马力 . 令人气愤的是,同样的项目,改变了NOTHING,有时可以非常快地加载,通常在我修复IIS Express并删除 My Docs\IISExpress 文件夹之后 . 最终发生"something"并且它正在进行's down to 2 minutes to load again. What I'并不是一个复杂的项目 . 没有外部库或依赖项,我的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 every time 它被调用,这又是数百次 . 我的理论是Visual Studio编译文件,将其保存到网络共享,网络共享然后以某种方式在其上标记新的时间,然后Visual Studio认为文件已更改,因此Visual Studio再次重新编译它 . 但只有一个理论;我真的不知道 .

首先,显然我有离线文件(这是办公室里的台式电脑;我不在乎) . 我明天要禁用,重启和重试 .

另外,将我的项目按原样移动到本地C:修复它 . 它加载速度非常快 . 但这在工作环境中并不理想 . 我丢失了以前的版本,我的代码根本没有备份,除非我手动复制它,并且它不再与任何人共享 .

如果涉及它,我可以将它从C来回复制到网络共享 . 每个页面加载等待两分钟会更烦人 .

30 回答

  • 9

    The problem for me was the "Browser Link" feature that is very heavy when you have several tabs open for the same project !

    因为每次我们启动项目时,它都会打开一个带有浏览器链接通信的新选项卡 .

    Just close all tabs associated with the project and keep only one open !

    这个免费的即时视觉工作室!这是魔法 ! ;-)

    “浏览器链接是自Visual Studio 2013以来的一项功能,可在开发环境与一个或多个Web浏览器之间创建通信通道 . 您可以使用浏览器链接一次刷新几个浏览器中的Web应用程序,这对于跨浏览器测试很有用 . “

  • 21

    以上都是很好的解决方案,我尝试了所有这些,但得到了解决方案here,这是

    Debug -> Delete All Breakpoints
    
  • 10

    我想我最终可能至少知道原因,但不是原因 . 当问题再次出现时,我注意到大量的“conhost.exe”进程孤立了 . 我会关闭Visual Studio,他们会保持开放状态 . 他们每个人的结束任务终于可靠地解决了这个问题 . [希望]

    (请注意,虽然Visual Studio使用它,但conhost.exe不是Visual Studio进程 . 因此,那里的其他用户可能还有其他运行conhost.exe的应用程序 . 我知道我的机器不是为什么我可以安全地结束所有这些任务,但是YMMV . )

    至于为什么会这样?这似乎发生在我同时打开多个项目时,我倾向于经常这样做,即使我在任何时候只构建和调试其中一个项目 .


    编辑#1 - 不幸的是,这不是一个“银弹” . 它并不总是适合我 . 通常,当事情变慢时,我只关闭所有Visual Studio会话,然后进入任务管理器并结束它的任何实例,conhost.exe,iisexpress.exe我可以找到Microsoft.VisualStudio.Web.Host.exe和MSBuild.exe .

    通常,在那之后,当我重新启动我的项目时,它会快速加载 . 但不总是 .

    真的,我认为最好的做法可能是不从重定向的文件夹/网络共享构建和调试代码 .


    编辑#2 - 两年后,在Visual Studio社区2013中,这仍然是一个问题,但我似乎至少找到了罪魁祸首的任务: Explorer.exe . 是的,谁知道 . 我结束那个任务的那一刻,bam,页面加载一秒钟 .

    如果我有一个Windows资源管理器文件浏览器打开我的重定向网络驱动器(这通常是我的代码所在的位置),这个问题似乎就出现了 . 关闭窗口是不够的,我必须杀死整个Explorer.exe任务 . 我只能猜到它在做什么......用文件句柄搞定?

    我通常可以使用任务管理器启动一个新的explorer.exe任务(我只能采取这么多alt-tabbing),并且Visual Studio将继续加载漂亮和快速 . 但是,如果我再次打开Windows资源管理器,它几乎总会回到超慢速 .

    因此,如果您有重定向的网络共享,请试一试 . 它肯定胜过当地的工作 .

  • 5

    你启用了FusionLog吗?

    在开始调试时,我的VisualStudio启动非常慢,打开解决方案并加载符号 . 它只在我的机器上很慢,但在其他机器上却没有 .

    FusionLog将大量日志内容写入磁盘 . 在我的案例中,只是在RegEdit上禁用它解决了所有问题 .

    这是注册表上的FusionLog密钥:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
    

    检查ForceLog值(启用1,禁用0) .

  • 10

    我删除了“Temporary ASP.NET Files”文件夹,我的localhost页面加载得到了显着改善 . 这是路径...%temp%\ Temporary ASP.NET Files \

  • 12

    关闭intelliTrace为我解决了这个问题 .

    在Visual Studio中,工具 - >选项 - > IntelliTrace

    然后,取消选中“启用IntelliTrace”复选框 .

    Disable IntelliTrace in Visual Studio 2012

  • 2

    在我的例子中,它是带有VS 2012的.NET Reflector Visual Studio Extension(版本8.3.0.93) . 每次Step Over(F10)调试都需要10秒 .

    在Visual Studio中,转到工具/扩展和更新...并禁用 .NET Reflector Visual Studio Extension . 不要忘记重新启动Visual Studio .

  • 7

    我也有调试执行性能问题,我尝试了很多调试器选项 . 在我的情况下,当我改变这个选项时实现了巨大的性能:

    工具 - 选项 - 调试 - 输出窗口 - (常规输出设置 - 所有调试输出) - 关闭

  • 69

    对于那些没有太多偏离默认VS设置的人来说,这是一个快速简便的解决方案 .

    工具 - >导入和导出设置 - >是,保存我当前的设置 - > Visual C#

    我相信上面的解决方案也适用于其他默认设置 . 在我的情况下,有些东西搞砸了我的符号加载设置但我无法解决它,即使我尝试了很多建议的解决方案 .

  • 25

    花了一整天等待符号加载与龟速一样慢,混合并在所有可能的组合之间切换:Just My Code, Caching symbolsIntellitrace,及时,killing processes等 .

    我的解决方案实际上是 disable the antivirus . 是的,Windows Defender正在放慢我的项目启动速度!它将检查Visual Studio请求它们的所有dll并减慢整个符号加载过程 .

    我不得不说我们的机器有很好的规格来快速编译解决方案,所以这绝不是问题 . 我们在VS 2013 Ultimate中编码 .

  • 25

    对我来说这是IE 9.08.8112.16241 . 一旦我使用Firefox或Chrome,就没有F10或F11的缓慢调试 . 我不知道IE的问题是什么,但我现在正式鄙视使用它进行测试 .

    更新:我已关闭所有IE程序加载项,它已恢复全速 . 一次打开一个,发现LastPass(在我的情况下)是罪魁祸首 . 我想我毕竟不会责怪MS .

  • 18

    就我而言,它是

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

    一旦我取消选中此项,我的调试开始时间从45-60秒下降到0-5秒 .

  • 2

    有一次,在断电后,每次遇到断点或抛出异常时,我都不得不面对同样的慢速问题 .

    我有一个模糊的记忆,“suo”文件(与“sln”解决方案文件在同一目录中)可能会被破坏并使一切变慢 .

    enter image description here

    我删除了我的“suo”文件,一切都很好 . .suo文件删除是无害的,只是意味着重新创建我的Windows布局加上启动项目和一些其他非关键自定义 .

  • 2

    对我来说,我实现了this tip,它通过在web.config中为编译标记添加以下两个属性,基本上大大提高了性能 .

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

    batch =“false”有什么作用?

    通过仅编译已更改且需要重新编译的页面,使预编译更具选择性

    optimizeCompilations究竟在做什么? Source

    ASP.NET使用每个应用程序哈希代码,其中包括许多内容的状态,包括bin和App_Code文件夹以及global.asax . 每当ASP.NET应用程序域启动时,它都会检查此哈希代码是否已从之前计算的更改 . 如果有,则删除整个codegen文件夹(编译和影子复制的程序集处于活动状态) . 启用此优化后(通过optimizeCompilations =“true”),哈希不再考虑bin,App_Code和global.asax . 因此,如果这些更改我们不会消灭codegen文件夹 .

    参考:Compilation element on msdn

  • 101

    启用 "Native Code" debugger 时,我遇到了Visual Studio调试速度慢的问题 . 尝试禁用它 .

    在“Visual Studio 2012”上转到:

    • 项目属性 - >

    • Web - >

    • 调试器(页面底部) . - >

    • 禁用除ASP.NET之外的所有内容

    希望能帮助到你 .

    类似的问题:12

  • 9

    在Windows资源管理器中打开解决方案文件夹,关闭visual studio,从Windows资源管理器中删除.suo文件 .

    现在在visual studio中打开项目,希望调试器可以快速连接/分离 .

  • 22

    类似的问题浪费了我一天的一半!

    由于我的问题的解决方案与此处所说的不同,我将发布它以便它可以帮助其他人 .

    我是一个断点 . 我有一个 "Break at function" 断点(即不是在代码行上按F9,而是使用断点窗口创建它们),它应该在我项目之外的库函数中停止 .

    我有 "Use Intellisense to verify the function name “检查 . (信息here . )

    这比地狱慢了(项目启动时间从2秒到5分钟) .

    删除断点解决了它 .

  • 6

    以下是我在Visual Studio 2012中解决“慢符号加载”问题的方法:

    • 转到工具 - >选项 - >调试 - >常规

    • 检查“启用我的代码”旁边的复选标记 .

    • 转到工具 - >选项 - >调试 - >符号

    • 单击“...”按钮,在本地计算机上的某处创建/选择一个新文件夹以存储缓存的符号 . 我将其命名为“符号缓存”并将其放在Documents - > Visual Studio 2012中 .

    • 单击"Load all symbols"并等待从Microsoft的服务器下载符号,这可能需要一段时间 . Note that Load all symbols button is only available while debugging.

    • UNCHECK“Microsoft Symbol Servers”旁边的复选标记,以防止Visual Studio远程查询Microsoft服务器 .

    • 单击“确定” .

    从现在开始,符号加载应该更快 .

    请注意,如果对Microsoft程序集进行任何更改/下载,则可能需要再次返回“符号”对话框和“加载所有符号” .

  • 2

    通过禁用 Browser Link 解决了我的慢速VS问题

    enter image description here

  • 8

    我还没有问题,但是我通过将调试器附加到进程本身来调试Visual Studio中的站点,而不是让VS为我做这些,我发现它可以大大缩短时间 . 我使用VS的扩展名为AttachTo,我有一篇关于如何使用它的小文章here .

    我希望这有帮助 .

  • 2

    在我的情况下,我注意到禁用我的互联网连接将使其运行速度与ctrl-f5一样快,所以我去调试 - >选项 - >符号,只是取消选中所有.pdb位置 .

    似乎VS每次启动调试会话时都试图连接到这些服务器 .

    请注意,禁用Debug-> Options-> Debugging-> General "Enable source support"或"Require source files to exactly match the original version" wouldn't 会有所不同 .

  • 37

    我遇到了同样的问题并尝试了上面的大多数决议 . 简单地删除缓存和临时文件最终会为我工作 .

    尝试删除这两个文件夹的内容:

    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
    
  • 3

    我也面临这个问题,下面是我执行的步骤,它始终适用于我:

    • Deleting the solution's .suo file.

    • Deleting the Temporary ASP.NET Files (您可以在%WINDOW%\ Microsoft.NET \ Framework \ Temporary ASP.NET Files中找到它)

    • Deleting all breakpoints in the application.

  • 3

    清空符号缓存对我有用 .

    请参阅:菜单栏/工具/选项/调试/符号/空符号缓存

  • 12

    完成上述所有操作后,对我有用的一件事是:
    在“线程”窗口(Debug-> Windows-> Threads)中,将Group by设置为None . 这只能在调试时完成 .

    即使在关闭窗口后,这也会产生影响 .

  • 5

    转到您的环境变量并查找密钥_NT_SYMBOL_PATH .

    删除它 .

    瞧,工作就像一个魅力 .

  • 582

    在Visual Studio中:

    工具 - >选项 - >调试 - >符号

    选择“仅指定模块” . 单击“指定模块”链接,然后添加一个空白模块(单击新文档按钮并单击“确定”) .

  • 2

    部分视图中也存在复杂性,其中页面上的错误无法立即识别 . 像Model.SomeValue而不是Model.ThisValue . 它可能没有下划线并导致调试问题 . 这可能是一个真正的痛苦 .

  • 13

    如果有人注意到左侧字段中出现此行为,请检查以确保您没有在web.config中设置任何断点 . 我必须使用鼠标单击鼠标设置一个,它确实减慢了所有调试操作 .

  • 2

    这些都不适合我,但我在一个被删除的符号上找到了一个断点 . 似乎2010年就是它 . 要查看这是否是您的问题,请执行debug-> windows-> breakpoints如果有任何内容,请删除它们 .

    桑德斯提到他检查了这一点,但在这个问题的解决方案中没有提到 . 也许是某些人的常识,但不是我们所有人 .

相关问题