2013-04-22 57 views
1

我正在考慮維護小固定有限數量對象(幾十個)的集合的有效方法,這將非常頻繁地更改(每秒至少幾次每秒幾十次)。 是否有一個現有的排序集合,它具有更新現有插入項目的關鍵(排名)的功能?Efficent C#對固定數量的可變對象進行排序收集

讓我們考慮以下項目的定義:

public class Item 
{ 
    public decimal Ranking { get; private set; } 
    public IIdentity Identity { get; private set; } 
    public IOtherInfo OtherInfo { get; private set; } 
} 

我要的那些項目(通常更新排名,有時前面的排名無效 - 這可以通過設置排名爲0或無限是,例如簡化)的輸入流。 Identity值只有很少的變化(它可以很快地轉換爲索引0到N),OtherInfo可以改變(但它可以很容易地存儲在單獨的查找數組中),最重要的是, 。 我正在考慮SortedCollection,但是無論何時排名變化(很常見),都需要刪除和閱讀項目,這聽起來效率很低。

任何建議集合,允許更新的項目和它的採取在收集將不勝感激。

+0

散列集呢? – 2013-04-22 16:45:46

+0

哈希集未被排序。 – 2013-04-22 16:48:38

+3

鑑於如果物品的數量非常小(幾十件物品是無物),我非常懷疑它會很重要。即使是很差的數據結構也不會對小數據集產生任何問題。最重要的是,每秒更新內容幾十次*不是很多。這還需要數百毫秒才能完成更新。這應該只需要幾十*納秒*。即使採用平庸的實現方式,您也可以每秒更新數百次。 – Servy 2013-04-22 16:50:19

回答

1

對於你正在報告的負載,我想說你應該使用一種數據結構,它可以提供更好的可維護性,而不必擔心會擠出一些額外的CPU週期。使用SortedListSortedSet,只有在遇到不可接受的結果時才擔心提高性能。

我會說,這是premature optimization is the root of all evil其中的一種情況。

+0

這是絕對有效的一點。我仍然沒有堅實的數字。但強烈預計這是一個弱點。在我的應用程序中將會有數百個這樣的結構,並且會有(N×數百)相應的併發數據流(通過本地千兆位鏈路流式傳輸) – Jan 2013-04-22 18:47:15

+0

其餘應用程序將非常簡單(消耗數據)需要同步。然而那些結構會消耗那些多線程的數據。 認爲例如關於來自多個來源的股票價格的彙總。 我應該在我的問題中提到這一點,但我不想添加令人分心的細節 – Jan 2013-04-22 18:54:35

+0

您需要這些集合是線程安全的這一事實是相當大的事實,而您提到的其他要點表明存在架構決策這也應該考慮到......我建議要麼重新工作或(可能更好)創建一個新的問題,以包括這些點 – 2013-04-22 20:55:59

相關問題