性能:SortedDictionary 與 SortedSet
我應該保持
1.) 一個 SortedDictionary(double,struct)
2.) 還是一個普通的 Dictionary(double,struct) 加上一個 SortedSet(double)?
我只想要快速插入。我不關心檢索,因為我不會做太多查找。我需要排序的性質,因為我所做的唯一查找將是最大雙精度數或幾個最大雙精度數。
我覺得時間表現很明智 - 兩者都是一樣的,
SortedSet<double>只是做了額外的工作。各位能確認一下嗎?我不知道的部分是是否保持排序,
SortedDictionary僅圍繞鍵(雙打)移動,還是鍵和值都移動。在後一種情況下,2.) 將優於 1.),不是嗎?此外,還不清楚
SortedDictionary內部是如何實現的。Sortedset是經過驗證的紅黑樹。
SortedDictionary<K, V>是要走的路。不僅因為它是適合您使用的正確結構,而且即使在性能和維護方面它也會更好。我只想要快速插入
- 在第二種情況下,您必須同時插入
Dictionary<K, V>和SortedSet<K>。這是兩個插入(一個 O(1) 和另一個 O(log n))。我希望它比單次插入SortedDictionary<K, V>(O(log n)) 慢。SortedDictionary<K, V>在內部實現為SortedSet<KeyValuePair<K, V>>. 的Key部分進行比較KeyValuePair<K, V>。因此,如果您對 的表現感到滿意SortedSet<T>,那麼就不應該回頭。sorteddictionary 僅圍繞鍵(雙精度)或鍵和值移動
**這顯然是微優化。**這只是移動幾個額外字節的問題,這無關緊要。
目前尚不清楚 sorteddictionary 是如何在內部實現的。Sortedset 是經過驗證的紅黑樹。
SortedDictionary<K, V>在內部實現為SortedSet<KeyValuePair<K, V>>. 的Key部分進行比較KeyValuePair<K, V>。 它是一棵紅黑樹。所以這也是被證明的表演者……另請注意,這
SortedDictionary<K, V>將減少記憶體,並導致更快的刪除和列舉。Dictionary<K, V>/SortedSet<K>混合方法將為您提供更快的查找,但它必須在列舉期間為字典中的每個鍵查找相應的值部分。這會變慢。**警告:**當我寫以上內容時,我沒有閱讀您的評論!
我使用的結構有點重~100字節
如果您可以將其更改為類,請執行此操作。如果您的應用程序對性能至關重要,那麼移動大約 100 個字節不會很好。
我製作了一個快速而骯髒的
Dictionary<K, V>/SortedSet<K>混合結構並對其進行了測試。
- 實際上,對於 100 字節的結構,它在插入時更快(快兩倍多)。當然會有懲罰(誰會創建一個 100 字節的結構?)。
- 當我將其更改為 class 時,它們都給出了相同的插入性能。
- 當我縮小結構的大小時,即使這樣插入性能也是相當的。
所以我的建議是切換到一個類並使用
SortedDictionary<K, V>. 如果您堅持使用結構,那麼Dictionary<K, V>/SortedSet<K>會更好。好 q 和 +1。