2013-10-16 80 views
3

我有一個WPF應用程序,用於監視某些進程並將它們的CPU和內存利用率繪製到折線圖中。使用性能計數器類C#讀取CPU%和內存值。該圖再次是一個UserControl,其中包含一個Canvas,我根據獲取的值手動繪製線。wpf中調度程序計時器的性能

當前我在每個圖UserControl中使用調度程序計時器,並在每個刻度中獲取新值並繪製它。

問題是因爲我添加了越來越多的進程被監控,我的應用程序因爲有很多更新發生而吃掉了CPU。

什麼是實現我所嘗試的更好的方法?每個進程的詳細信息都在一個單獨的選項卡中,並且僅在加載時初始化,但在選項卡不在視圖中時停止繪圖不是我的選擇,因爲我想要連續繪圖。

有沒有更好的方法來做到這一點?

回答

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

而不必計時器的集合,將需要更新,處理對象需要被調查的集合,和一個計時器,將通過此列表中每個刻度迭代的。
使用線程安全集合(少數提供.Net)。