詞典和混合詞典有什麼區別? 兩次拿鑰匙和價值,哪一個更好根據表現?詞典和混合詞典的區別
混合詞典:
Dim myCol As New HybridDictionary()
myCol.Add("Braeburn Apples", "1.49")
詞典:
Dim dictionary As New Dictionary(Of String, Integer)
dictionary.Add("Dot", 20)
詞典和混合詞典有什麼區別? 兩次拿鑰匙和價值,哪一個更好根據表現?詞典和混合詞典的區別
混合詞典:
Dim myCol As New HybridDictionary()
myCol.Add("Braeburn Apples", "1.49")
詞典:
Dim dictionary As New Dictionary(Of String, Integer)
dictionary.Add("Dot", 20)
HybridDictionary
使用ListDictionary
當設定小且Hashtable
當集很大。
它一般比更高性能的一個Dictionary
(至少當有少於10個項目,否則它應該是幾乎相同),但有一個命中的時候,當你去了10個項目的集合改變從List
到Hashtable
(該列表必須被複制到散列表)。
爲HybridDictionary
推薦的使用(與正常Dictionary
)是集合時將會很小的大部分時間(再次,< 10個項目按照目前的實現),但有一個可能性,它會變得很大。
由於在使用中(與ListDictionary
或HashTable
相比,因爲Dictionary
使用泛型),沒有什麼區別,它只是一個性能問題。
我的建議:除非特別需要,否則不要使用HybridDictionary
。
由於它沒有使用泛型,正如@adrianm在註釋中指出的那樣,如果使用值類型,它將導致裝箱和拆箱,這是以性能爲代價的。
而且,由於這只是一個很小的有點快了不到10個項目和10項不應該是一個大的性能上Hashtable
連打...除非有什麼東西真的關鍵,沒有必要在使用它所有。
由於HybridDictionary會爲值類型導致大量裝箱/取消裝箱操作,因此我認爲通用字典對於包含值類型的小集合也更快。在支持泛型的平臺上查看不需要在新代碼中使用HybridDictionary。 – adrianm
@adrianm也是絕對正確的。我會將其添加到答案中 – Jcl