【问题标题】:Attaching Visual Studio debugger causes high CPU usage and UI thread locks附加 Visual Studio 调试器会导致高 CPU 使用率和 UI 线程锁定
【发布时间】:2016-09-03 08:28:35
【问题描述】:

我有一个 WPF 应用程序,它执行一些异步网络(通过 100 个并行套接字进行协商)。如果我启动附加了 VS 调试器的应用程序并启动网络代码,我的 CPU 使用率将跃升至 60%(在 VS、VS 调试器和 vshost 进程之间共享),并且 UI 变得非常无响应,持续冻结长达 3 秒。当我将调试器附加到已经运行的进程时,也会发生同样的情况。在正常情况下它使用 1-3% 的 CPU 并且 UI 很流畅。

“CPU 使用率”模式下的 VS 分析器显示 CPU 被 [外部代码] 使用

如何解决此问题?

【问题讨论】:

  • 在“输出”窗口中查看发生了什么,水晶球表示您看到了 很多 条消息。它们并不便宜。
  • 确实我有很多“抛出异常”消息。有没有办法防止这种情况发生?
  • 异常以大约 30/秒的速度抛出,但这在我的用例中是正常的,它们都被捕获了。
  • 好吧,看起来减速确实是由很大的异常率引起的。我试图删除我的网络代码并用一个异常抛出替换它,但我仍然得到无响应的 UI。我还在输出窗口中禁用了第一次机会异常,但它没有解决问题。调试器是否有一些选项可以停止收集第一次机会异常?
  • 每秒 30 个不太可能是简单的解释。右键单击输出窗口并取消选中“异常消息”以减少开销。接下来使用分析器是明智的。

标签: c# .net debugging visual-studio-2015 profiling


【解决方案1】:

如果你只是抛出异常,你是如何真正处理这个异常的?

例如,如果客户端将请求发送到服务器端,服务器端将响应发送给客户端,但您的客户端无法真正处理带有一些异常的响应,我认为这会影响您的 UI 流程可能有高 CPU 使用率或其他。

所以真正的原因是异常是什么以及如何真正解决/处理这个异常。

为避免看到该消息,右键单击输出窗口并取消选中“异常消息”是一种解决方法,但找到真正的原因并解决它会是一个更好的解决方案。

【讨论】:

  • 首先,我的应用程序运行良好,没有附加调试器。我使用非常不可靠的网络和服务器,因此我处理网络异常的策略是静默记录它们并重试操作。其中大部分是 TimeoutException 和 SocketException。正如我已经指出的,从输出窗口隐藏异常并不能解决问题。
  • 您是否禁用了 WPF 项目属性中的“启用 Visual Studio 托管进程”选项?貌似你用的是VS profiler工具,你用的是这个CPU工具吗? blogs.msdn.microsoft.com/visualstudioalm/2014/02/28/…,[外部代码]树下有没有项目?
  • 正如我在帖子中已经指出的那样>>“CPU 使用率”模式下的 VS 分析器显示 CPU 被 [外部代码] 使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多