2014-02-27 80 views
2

我正在使用ObservableCollection將信息存儲在我的CPU使用情況並將此信息傳輸到折線圖。信息每秒更新一次。它工作正常,但我意識到這將會加重我的記憶,因爲它只是不斷地向列表添加信息。如何管理我的內存問題

這種情況下的常態是什麼?你是否在每分鐘後重置列表?我覺得這會弄亂圖表每次重置時圖表的樣子。請建議如何快速處理這個記憶問題。謝謝。

ObservableCollection<KeyValuePair<double, double>> chart1 = new ObservableCollection<KeyValuePair<double, double>>(); 


chart1.Add(new KeyValuePair<double, double>(DateTime.now, getCurrentCpuUsage())); 

回答

3

你應該做什麼取決於你的要求。

如果您只需要保留一定數量的數據(例如10分鐘或其他),則有界隊列可能比ObservableCollection更合適。這樣,「太舊」的事件會自動脫離數據結構,允許您限制內存使用量。

如果您仍然希望能夠在未來訪問舊數據,您可以將從隊列尾部出來的數據寫入文件或數據庫,而不是將其丟棄。

對於一個實現一個有界隊列看到

Limit size of Queue<T> in .NET?

因爲你可能需要一個觀察的有界隊列,下面是關於如何實現一個(非常簡單)

Observable Stack and Queue

一些注意事項

有界隊列解釋

一個普通的隊列就像在收銀臺上的線。人員排隊(或者如英國人所說的排隊),收銀員把人員排在隊伍的最前面。先進先出。 FIFO。

有界隊列設置線的最大長度。對於一條真實的線路,如果太長,新人將被阻止加入線路。軟件中的一些有限隊列也是如此。保持隊列長度不超過限制的另一個選項是在線路太長時從隊列的前面移除。在現實生活中,這可能不是很公平,但對於軟件算法來說,這有時候正是你需要的。

+0

我環顧四周,確實遇到了一個有界的隊列,但有點令人困惑。試圖通過你的鏈接把握這個想法。 – kar

+0

增加了一些解釋來幫助你理解有界隊列的概念。 –

0

存儲儘可能多的信息,然後放下(或保存到文件)其餘部分。

如果您需要存儲很長時間跨度(超過1M數據點)的數據,您可以嘗試壓縮數據。但首先要弄清楚你的目標並衡量性能時間/內存使用情況。

+0

在任何時候,我只希望存儲1分鐘的信息。我每秒存儲信息,因此有60套信息。 – kar