2009-11-30 75 views
12

当通过F10逐行浏览我的C#代码时,它需要调试器超过一秒才能到达下一行。Visual Studio 2008:调试托管代码时跳到下一行非常慢

我试过删除所有手表和断点,但没有任何区别。

这是正常的吗?现在已经很长时间了,所以我甚至不记得这是否更好。我的开发计算机是一台没有后台任务活动并有大量内存的四核机器。

如果不正常,我还有什么可以尝试的?它仍然可以使用,但一个不太缓慢的用户界面会很好...

回答

13

可能发生的情况是在调用堆栈框架中有一个变量,它有一个昂贵的.ToString方法。 2008年,无论窗口是否真实可见,调用堆栈窗口的数据都会在每一步中重新生成。构建此窗口的一部分将针对出现在参数列表中的值调用.ToString(如果它们具有重写的.ToString)。尝试禁用隐式.ToString调用,看看是否解决了这个问题。

  • 工具 - >选项 - >调试
  • 取消选中“启用隐式的ToString称之为”
+1

在Visual Studio 2010中,调用堆栈窗口似乎只在实际可见时才被重建。 禁用隐式ToString调用的替代方法是右键单击调用堆栈窗口并取消选中“显示参数值”。 – 2009-12-11 10:13:40

+0

@Phil,这是我们在Beta2之前做出的性能改变。 – JaredPar 2009-12-11 15:26:44

+0

谢谢!我的问题实际上是由于我的某个类的DebuggerDisplayAttribute过度密集而导致的。我将逻辑移入ToString()方法中,速度更快。很高兴知道这是物业价值计算,放慢了事情的方式。谢谢!! – Doug 2010-03-16 14:04:47

0

您是否有很多Watch表达式设置?他们会在每一步之间进行评估,如果他们需要时间跑步,您会发现它在步进时会延迟。

+1

不,我已经删除了所有的手表,以确保这不是问题。 – 2009-11-30 17:50:39

5

我发现,如果您可以选择打开调试非托管代码,则即使您只是调试托管代码,调试器也可能需要一段时间才能在行之间切入。尝试关闭该选项(项目>属性>调试>启用调试器>启用非托管代码调试)。

+0

+1我上次在视觉工作室遇到缓慢的步伐,这是原因 – 2009-11-30 17:53:05

+0

听起来不错,但我在哪里可以找到这个选项?我没有看到它在我的罗列设置中的任何地方。 – 2009-11-30 17:54:11

+0

我相信它是在调试组下,但我在家,无法检查。此外,Visual C#Express中可能不提供此选项。 – 2009-11-30 17:57:33

1

我曾经经历过,因为我已经建立了VS寻找PDB文件在网络上慢调试分享,不再存在。

入住这里:工具 - 选项 - 调试 - 符号 - 符号文件(.PDB)场所

1

我听说过这样的问题,如果“自动”窗口已打开。尝试关闭它,看看你的表现是否改善。

如果你还没有,你应该也可以安装"Visual Studio 2008 SP1 debugging and breakpoint"补丁。请注意,此修补程序会在SP1之上。该补丁的文档没有具体说明你看到的缓慢,但它是一个相当大的补丁,你可能会很幸运。

3

在我的情况下,禁用“当一个进程中断时打破所有进程”(工具/选项/调试器)将时间从2-3秒缩短到几分之一秒。

我不知道为什么这个选项对于单步完成有如此大的影响。 顺便说一句,我想如果你使用的线程不是彼此独立的,禁用这个选项可能会导致麻烦。

+0

我有同样的问题。谢谢。我要去调查一下。 – 2011-12-09 09:50:50

+0

这解决了我在VS2010中缓慢的调试问题。 – Logan 2013-02-18 12:06:38

0

在停止C#调试之后,我再次启动C#调试之前遇到了10秒的延迟。在这段时间,VS2008将无法点击。在我禁用了Project Properties -> Debug中的Visual Studio托管过程后,现在有0秒的延迟。

1

关闭启用地址级调试选项Tools > Options > Debugging > General
它对我造成了巨大的影响。

4

我尝试了以上所有内容。取消选中“在源中显示线程”按钮修复了它。