WPF中Dispatcher定时器的性能表现

3
我有一个WPF应用程序,它监控某些进程并将它们的CPU和内存使用情况绘制成折线图。使用C#中的性能计数器类读取CPU%和内存值。图形是一个包含Canvas的UserControl,我手动绘制线条以匹配获取到的值。
目前,我在每个Graph UserControl中使用Dispatcher定时器,在每个tick中获取新值并绘制它。
问题在于,当我添加更多要监视的进程时,我的应用程序会消耗CPU,因为有很多更新正在发生。
有什么更好的方法来实现我所企图的吗?每个进程的详细信息都在单独的选项卡中,并且仅在加载时初始化,但对于我来说,当选项卡不在视图中时停止绘图不是一个选项,因为我需要连续绘图。
有更好的方法吗?
2个回答

1
你可以尝试使用Reactive Extensions计时器。
private IDisposable timerSubscription;

public void StartTimer()
{
  timerSubscription = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1), Scheduler.TaskPool)
                                .ObserveOnDispatcher()
                                .Subscribe(o =>
                                  {
                                    Console.WriteLine("Hooray I'm ticking on TaskPool for {0} times!", o);
                                  }
}

/// and you can stop timer like this
public void StopTimer()
{
      using (timerSubscription)
      {

      }
}

1

不要使用需要更新的计时器集合,而是处理需要轮询的对象集合,并使用单个计时器在每个tick上迭代此列表。
使用线程安全的集合(.Net提供了一些)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接