asp.net mvc - 调试符号 - Visual Studio的调试/加载速度非常慢




没有为dll加载的符号文件 (20)

我很有智慧。 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 2013开始,Browser Link是一项功能,它在开发环境和一个或多个Web浏览器之间创建了一个通信通道。 您可以使用浏览器链接一次在多个浏览器中刷新您的Web应用程序,这对跨浏览器测试非常有用。“


请确保您没有以管理员模式打开Visual Studio

我面临这个问题,不得不以正常模式运行。


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

Debug -> Delete All Breakpoints

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

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

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


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

现在在Visual Studio中打开项目,希望调试器能够快速地连接/分离。


在我的情况下,它是VS 2012中的.NET Reflector Visual Studio Extension(版本8.3.0.93)。每个Step Over (F10)都需要10秒的调试时间。

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


在我的情况是这样的

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

一旦我没有选择这个,我的调试开始从45-60秒降到0-5秒。


在部分视图中也有复杂的情况,即页面上有错误无法立即识别。 像Model.SomeValue而不是Model.ThisValue。 它可能不会强调并导致调试问题。 这可能是一个真正的难题。


完成上述所有工作之后,有一件事情是:
在Threads窗口(Debug-> Windows-> Threads)中,将Group by设置为None。 这只能在调试时完成。

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


对于我来说,我实现了这个技巧 ,通过在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上的编译元素


对我来说,这是有条件的断点。 那些似乎真的放慢了速度。


“Native Code”调试器被启用时,我遇到了缓慢的Visual Studio调试问题。 尝试禁用它。

在“Visual Studio 2012”上,请转到:

  1. 项目属性 - >
  2. 网页 - >
  3. 调试器(页面底部)。 - >
  4. 禁用除ASP.NET外的所有内容

希望能帮助到你。

类似的问题: 2


我不知道你是否仍然遇到这个问题,但是我通过将调试器附加到进程本身而不是让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布局加上开始的项目和一些其他非关键定制。


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

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

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

我有“使用Intellisense验证函数名 ”CHECKED。 (请here

这个速度放缓了,比如地狱(项目从2秒开始到5分钟)。

消除破发点解决了它的好处。


花了整整一天的时间等待符号加载速度像乌龟速度一样慢,混合并在所有可能的组合之间切换: 只是我的代码,缓存符号Intellitrace ,实时, 杀死进程等。

我的解决方案实际上是禁用防病毒 。 是的,Windows Defender正在放缓我的项目启动! 它将在Visual Studio请求它们时检查所有dll,并放慢整个符号加载过程。

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





cassini