WPF 中调度程序计时器的性能
本文关键字:性能 计时器 调度程序 WPF | 更新日期: 2023-09-27 18:35:28
我有一个 WPF 应用程序,它监视某些进程并将其 CPU 和内存利用率绘制到折线图中。CPU% 和内存值使用性能计数器类 C# 读取。该图又是一个包含Canvas
的UserControl
,我正在根据获取的值手动绘制线条。
目前,我在每个图形UserControl
中使用调度程序计时器,在每个刻度中,我都会获取新值并绘制它。
问题是,当我添加越来越多的要监视的进程时,我的应用程序会占用CPU,因为有很多更新正在发生。
实现我正在尝试的更好的方法是什么?每个过程的详细信息都在一个单独的选项卡中,并且仅在加载时初始化,但是当选项卡不在视图中时停止绘图对我来说不是一个选项,因为我想要一个连续的绘图。
有没有更好的方法
您可以尝试使用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)
{
}
}
与其使用需要更新的计时器集合,不如处理需要轮询的对象集合,以及在每个时钟周期中循环访问此列表的单个计时器。
使用线程安全集合(.Net 中提供了一些集合)。