仅当未附加性能分析器时 UI 线程锁定

Posted

技术标签:

【中文标题】仅当未附加性能分析器时 UI 线程锁定【英文标题】:UI thread locks only when performance profiler is not attached 【发布时间】:2016-08-28 17:36:16 【问题描述】:

我的 IU 线程在我开始某项任务时锁定,并且每秒更新一次。但是当我连接性能分析器来研究发生了什么事情时,一切都很顺利,并且 UI 线程在 98% 的时间都处于空闲状态。我已经尝试过 Visual Studio 集成分析器和 dotTrace 并且都产生了相同的结果。如何在没有分析器的情况下分析 UI 锁?

我讨厌海森虫

【问题讨论】:

我将代码切成两半,二进制搜索是罪魁祸首。在主窗体中添加一个 10 毫秒间隔的计时器并让它更新标签。慢慢剪掉所有东西,看看什么时候有变化。 您在 Visual Studio 下运行,对吧?只需单击pause button 并查看它在做什么。就这么简单。 但话说回来,他们为某些目的制造工具,不是吗? :) 经过一些实验我发现高cpu使用率是由VS调试器引起的。如果我在 VS 之外运行应用程序,它运行顺利。创建了一个后续问题***.com/questions/39304865/… 【参考方案1】:

使用 Visual Studio;调试-Windows-线程。点击暂停。这将向您显示所有活动线程。 Parallel Stacks 将向您显示所有当前的 Stack Traces(在一个时髦的图表中),显示哪个产生了哪个。

使用它,您将找到每个线程/堆栈的最后一次调用,并能够查看导致冻结的最后一次调用。

【讨论】:

以上是关于仅当未附加性能分析器时 UI 线程锁定的主要内容,如果未能解决你的问题,请参考以下文章

查找可能由线程锁定引起的性能问题(可能)

仅当未禁用前一个元素时才使用指令

仅当未使用 @azure/msal-react 进行身份验证时才重定向 onLoad

我如何分析多线程问题?

性能优化 UI 主线程 卡顿监测 BlockCanary

MySQL伪事务和性能