Visual Studio的调试/加载速度非常慢
我很有智慧。 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:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.
在上面,我有三个DisplayTemplates:“Contact”,“Location”和“StatusCode”。 看来每次调用displaytemplate时,IIS都会加载符号两次。 因此,如果我正在显示一个包含所有三个这些显示模板的100个条目的表格,则会加载600个单独的符号。
这也不是一个快速的操作。 查看IIS生成的日志文件,每个符号加载大约需要200 ms。 因此,超长的延误。
我试过的东西:
My DocsIISExpress
文件夹,或者修复/重新安装了Visual Studio→问题可能会消失,但只有一段时间才会回来。 任何建议都值得赞赏。
要回答更多的问题,是的,我的机器肯定有马力。 令人气愤的是,同样的项目,没有任何改变,有时可以非常迅速地加载,通常在我修复IIS Express并删除My DocsIISExpress
文件夹后。 最终会发生“某些事情”,并且再次加载需要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:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_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:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesrootb63f82366775085dApp_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 2012中的“缓慢符号加载”问题:
进入工具 - >选项 - >调试 - >常规
检查“启用我的代码”旁边的复选标记。
进入工具 - >选项 - >调试 - >符号
点击“...”按钮并在本地计算机上的某处创建/选择一个新文件夹来存储缓存的符号。 我将它命名为“符号缓存”,并将其放入“文档” - >“Visual Studio 2012”中。
点击“加载所有符号”并等待从微软服务器上下载这些符号,这可能需要一段时间。 请注意,加载所有符号按钮仅在调试时可用。
请检查“Microsoft Symbol Servers”旁边的复选标记,以防止Visual Studio远程查询Microsoft服务器。
点击“确定”。
从现在起,符号加载应该快得多。
请注意,如果您对Microsoft程序集进行了任何更改/下载,则可能需要重新进入“符号”对话框和“加载所有符号”。
关闭intelliTrace为我解决了这个问题。
在Visual Studio中,工具 - >选项 - > IntelliTrace
然后,取消选中“启用IntelliTrace”复选框。
这一切都没有为我工作,但我找到了一个被删除的符号断点。 似乎2010年挂在上面。 要查看这是否是你的问题,请执行debug-> windows-> breakpoints如果有任何内容只是删除它们。
桑德斯说,他检查了这一点,但没有提到这个问题的解决方案。 对于一些人而言,也许是常识,但不是全部。
链接地址: http://www.djcxy.com/p/18399.html上一篇: Visual Studio debugging/loading very slow
下一篇: Can you force Visual Studio to always run as an Administrator in Windows 8?