调度器定时器在wpf中的性能

时间:2013-10-16 06:06:17

标签: c# wpf performance

我有一个WPF应用程序,它监视某些进程并将其CPU和内存利用率绘制成折线图。使用性能计数器类C#读取CPU%和内存值。该图表再次是包含UserControl的{​​{1}},我根据提取的值手动绘制线条。

目前我在每个图表Canvas中使用Dispatcher计时器,并且在每个刻度线中我获取新值并绘制它。

问题是当我添加越来越多的进程来监视时,我的应用程序因为发生了大量更新而占用了CPU。

有什么更好的方式来实现我的目标?每个进程的详细信息都在一个单独的选项卡中,只有在加载时才会初始化,但是当选项卡不在视图中时停止绘图对我来说不是一个选项,因为我想要一个连续的情节。

有更好的方法吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

相关问题