次のアーキテクチャを持つWPFアプリケーションがあるとします。
[ワーカースレッド]->[キュー1]->[キューマネージャースレッド]->[キュー2]->[UIスレッド]
ワーカーはあるサービスからデータをリッスンしており、そのデータを不確定な時間(1秒間に複数回、または数秒ごとに数回)で受信し、キュー1にキューに入れ、次にキューマネージャーにキューを入れます。 UIスレッドは、データ項目がキュー2にキューイングされる速度を増減することを決定する場合があります。キュー2は、UIスレッドがUIを更新するために使用し、場合によってはUIスレッドを圧倒しないように、いくつかの項目を削除します。受信するメッセージが多すぎる(たとえば、各データメッセージのタイムスタンプをチェックし、メッセージ間の差がUIが更新した最後のデータ項目よりも少なくとも5秒古い場合にのみ、キュー2にエンキューすることを決定する場合があります)
UIスレッドには、キュー2からの新しいデータでUIを更新するためにset-intervalを起動するタイマーがあります。私ができるようにしたいのは、UIが自分自身を更新してその「応答性」を測定する速度を決定することです。スロットルするために、たとえば、UIを更新する頻度に関するタイマー間隔を増減します
UIに多数のコントロール(グリッド、チャートなど)があり、すべてがUIシェルのキュー2のデータのさまざまなフィルター処理/グループ化されたサブセットにバインドされていて、それらのコントロールを更新すると、UIが応答しなくなり、更新の合間にフリーズし始めたとします。これは、UI更新の間隔をどのように/いつ増やす/減らすかを知るためのコードからですか?基本的に、データにバインドされているすべてのコントロールでUI全体を再バインドするのにかかる時間を測定するにはどうすればよいですか?
ところで、これは良いデザインですか、それとも改善できますか?他に検討できる戦略はありますか?