【发布时间】:2012-08-13 04:16:51
【问题描述】:
假设我有一个 WPF 应用程序,其中我有以下架构:
[工作线程] -> [队列1] -> [队列管理器线程] -> [队列2] -> [UI线程]
Worker 正在侦听来自某个服务的数据,并以不确定的时间(可能每秒多次或每隔几秒几次)接收该数据,然后将其排队到队列 1,然后是队列管理器,具体取决于“ UI 线程的健康”可能会决定提高/降低数据项排队到队列 2 的速率,UI 线程使用队列 2 来更新 UI,可能会丢弃一些项目,以免在事件它接收到太多消息(例如,它可能决定它将检查每个数据消息的时间戳,并且仅当消息之间的差异比 UI 更新的最后一个数据项早 5 秒时才将其排入队列 2。 )
UI 线程将有一个计时器,该计时器触发一个设置间隔,以使用队列 2 中的新数据更新 UI。我想要做的是确定 UI 更新自身的速度以测量它的“响应”,以限制例如增加/减少关于多久更新一次 UI 的计时器间隔
假设我的 UI 有很多控件(网格、图表等)都绑定到我的 UI shell 中队列 2 上不同的过滤/分组数据子集,并且在更新这些控件时 UI 开始变得无响应并在更新之间冻结,如何我可以从代码中检测到这一点,以便知道如何/何时增加/减少 UI 更新的间隔吗?基本上,我如何衡量跨绑定到数据的所有控件重新绑定整个 UI 需要多长时间?
顺便说一句,这是一个好的设计还是可以改进?还有其他我可以考虑的策略吗?
【问题讨论】:
-
The WPF Performance Suite 应该在您的工具箱中,如果它还没有的话。
标签: c# .net wpf multithreading