C#Hashtable與Dictionary效能

來源:互聯網
上載者:User

標籤:blog   http   io   ar   使用   sp   資料   on   問題   

由於 Hashtable 和 Dictionary 同時存在, 在使用情境上必然存在選擇性, 並不任何時刻都能相互替代.
[1] 單線程程式中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分.
[2] 多線程程式中推薦使用 Hashtable, 預設的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全安全執行緒的類型. 而 Dictionary 非安全執行緒, 必須人為使用 lock 語句進行保護, 效率大減.
[3] Dictionary 有按插入順序排列資料的特性 (注: 但當調用 Remove() 刪除過節點後順序被打亂), 因此在需要體現順序的情境中使用 Dictionary 能獲得一定方便.

幾種C#架構提供的資料結構對單值尋找的效率比較->http://www.cnblogs.com/eaglet/archive/2008/10/23/1317893.html
我個人是覺得,無論什麼時候,都應該使用Dictionary<K,V>,理由如下:
1、Dic是型別安全的,這有助於我們寫出更健壯更具可讀性的代碼,而且省卻我們強制轉化的麻煩。這個相信大家都明白。
2、Dic是泛行的,當K或V是實值型別時,其速度遠遠超過Hashtable。這個大家對實值型別與參考型別有所瞭解的話也會明白。
3、如果K和V都是參考型別,如eaglet所測,Hashtable比Dic更快,這裡我要指出,eaglet所做的測試是有問題的。原因在於Hashtable與Dic採用的是不同的資料結構。eaglet的“Dictionary 由於在Hashtable基礎上封裝了一層”這個說法是不對的。

Dictionary 調用 Add 方法之前使用 ContainsKey 方法測試某個鍵是否存在,否則得到一個KeyNotFoundException。
當程式頻繁嘗試字典中不存在的鍵時,使用 TryGetValue 方法來檢索值,這種方法是一種更有效檢索值的方法。

具體我也不講了,因為有人(Angel Lucifer)已經講得很清楚了,引用如下:

http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html 
http://www.cnblogs.com/lucifer1982/archive/2008/07/03/1234431.html

Hashtable在指定capacity參數時,它並不只開出capacity個槽的記憶體空間,而是開出比 capacity / 0.72(預設裝填因子) 大的最小素數個槽的空間;而Dic在指定capacity時,是開出 比capacity 大的最小素數個槽的空間。因此可以看到,樓主雖然都指定capacity為10萬,而實際上Hashtable的槽的總數遠遠大於Dic的槽的總數,也就是佔用的記憶體遠遠大於Dic,因此,如此測試是不公平不公正的,如要公平公正的測試,則應該把Dic的capacity指定為 10萬/0.72,請大家再測試其效能。


url:http://www.cnblogs.com/jhh0111/archive/2008/10/23/1318223.html

C#Hashtable與Dictionary效能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.