VS2010调试入口非常缓慢

7
当我使用“开始调试”(F5)或连接到ASP.NET工作进程时,我的Web应用程序会非常缓慢地加载应用程序中的程序集。在VS2010状态栏中滚动时,我可以逐个读取它们的名称。
在开始调试时,我发现MSVSMON.exe使用50%的CPU并锁定在50%,显然填满了一个完整的核心。同时看到这被描述为Visual Studio远程调试监视器,我不确定是否应该使用它,因为我正在本地调试所有东西。
如果我是通过RDP连接环境虚拟运行,这是否可能涉及到这个问题?
主机机器:Server 2008企业版R2双核Xeon 2.53ghz
虚拟实例:Win7企业版6GB RAM全部处理器分配
这看起来正常吗?如果我在本地调试,MSVSMON甚至应该运行吗?

我在本地或远程、Web 或普通进程调试时都没有性能问题。VS 在我的 x32 上运行,远程机器运行 x64。 - Jonathan Allen
5个回答

19

菜单.调试.删除所有断点

对我有效。


我不知道为什么,但这对我也起作用了。从调试到完成的网页时间从20秒缩短到了3秒。但我想知道为什么!我只在同一项目中设置了少量断点(从未被触发)。 - Sire
在VS2010中肯定存在一个关于断点丢失或其他问题的bug。 - Chris Marisic
2
如果您按名称添加断点(函数断点),调试器需要扫描加载的所有DLL的所有符号,以检查是否有任何匹配给定名称的内容。这需要花费大量时间,而不是一个错误。 - Cosmin Onea
1
条件断点必须在指令指针遇到该位置时进行评估,这意味着上下文切换会频繁发生。即使是简单的条件断点,它们往往对性能产生可怕的影响。 - Joshua A. Schaeffer

4

是的,当您调试64位程序时,将使用msvsmon.exe。由于Visual Studio完全是32位的,因此需要远程调试器来弥合差距。

没有理由认为减速是由于它是远程调试器引起的。可能会费力地查找和加载.pdb文件。或者意外地打开了混合模式调试选项,因此调试器也看到了所有非托管DLL加载并为它们找到符号。当然,这些只是猜测。


3

我曾经遇到过同样的问题,但是这个解决方案对我没有起作用。最终,我不得不进入“工具” ->“选项” ->“调试” ->“符号”,取消勾选符号文件(.pdb)位置,并单击“清空符号缓存”按钮。之后,调试变得更加顺畅。


1
非常有价值的观点,这并不是我描述的确切情况,在那里我看到它以每秒1个左右的速度加载我的程序集,但如果您看到它加载您不拥有的程序集,那么将大大降低调试入口。使用符号源代码调试 .NET 代码的能力非常棒,但仅应针对特定需求打开此功能,然后立即关闭。 - Chris Marisic

3
在调试开始时,查找符号通常非常缓慢,特别是如果您已经配置了其中一个远程符号选项,并且没有在各种DLL上设置“忽略”,这些DLL不会在MS服务器上具有符号。 这些可能不仅是代码的第三方组件,还包括由图形驱动程序注入的挂钩DLL,因此值得注意正在尝试加载什么。 在启动调试时运行 Fiddler(http://www.fiddler2.com/fiddler2/) 将向您显示是否远程获取符号。 即使VS没有明确设置(在tools->options-debug中)为远程符号获取,它仍将遵循_NT_SYMBOL_PATH环境变量-检查是否设置以及它指向何处。

0
对我来说,问题在于我安装了一个PUP(潜在的不需要的程序),它减缓了其他进程的速度。在MSVSMON显示这种行为几次之后,我意识到Search Protect by conduit的Cltmng.exe进程也占用了异常数量的CPU,删除它解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接