【发布时间】:2014-02-07 15:33:54
【问题描述】:
我有一个正在积极使用的应用程序,UI 线程很少发生“冻结”。这当然会导致应用程序变得无响应并需要用户手动终止它。
由于重现此问题非常困难,我想开发一些工具来帮助收集有关该问题何时在现场发生以及当时发生的情况的数据。我正在考虑的是某种后台看门狗任务,它将监视来自定期调度的 UI 线程任务的“心跳”。如果它安静太久,我可以说 UI 被有效地锁定(或者至少停滞的时间比我想要的要长得多),因此收集数据。
所以,为了准备这个,有几个问题:
这样的东西已经存在了吗?这似乎是一个相当普遍的问题,所以如果有现有的工具可以帮助诊断这个问题,那么使用这些工具而不是推出我自己的解决方案可能是值得的。
我仍在争论当检测到冻结时我应该尝试收集哪些信息。有什么方法可以让我轻松获取 UI 线程的堆栈跟踪以便记录它吗?可能从所有活动线程中获取堆栈跟踪?有什么方法可以捕获完整的调试转储吗?
【问题讨论】:
标签: c# .net multithreading locking