假設我們有一個大的(int,string)元素的只讀列表。用於並行搜索的最快的.net數據結構
什麼是從列表中獲取物品的最快方法?
我知道一個通用字典是快速的,但據我所知它只使用1個CPU,而今天的計算機至少有2個CPU。
作爲一個側面的問題:什麼是最快的解決方案來搜索這個集合的多個項目?例如collection.GetItems(new int [] {1,2,3,4}),其中1,2,3,4是鍵。
謝謝!
假設我們有一個大的(int,string)元素的只讀列表。用於並行搜索的最快的.net數據結構
什麼是從列表中獲取物品的最快方法?
我知道一個通用字典是快速的,但據我所知它只使用1個CPU,而今天的計算機至少有2個CPU。
作爲一個側面的問題:什麼是最快的解決方案來搜索這個集合的多個項目?例如collection.GetItems(new int [] {1,2,3,4}),其中1,2,3,4是鍵。
謝謝!
字典使用散列表,它應該分配到O(1)。計算密鑰上的散列值應該非常快,並且散列查找是直接數組內存偏移量,並且希望能夠行走非常短的碰撞鏈。
因此,我不建議優化查找,除非字典無法滿足您的需求,而且速度太慢。你可能會爭辯說,有一個處理器會浪費,但試圖利用該處理器來優化一個可能不存在的問題將會使你的代碼複雜化。
我會建議維護一個查找字典和每個查找。
唯一的考慮是記憶。字典將增加內存佔用空間以使查找速度更快 - 典型的空間與時間的關係。
如果你需要保持低內存,你需要更快的查找,你有更多的處理能力(多核),那麼也許。
在這種情況下,我會建議您查看任務並行庫。這裏是一篇文章:http://www.codeproject.com/KB/cs/TPL1.aspx
我同意你的答案。我似乎忘記了哈希表如何工作。對於任何無法生成好散列碼的問題,該問題仍然有效。使用並行擴展方法可行,但我期望看到一個BCL實現。 – user973156
BCL詞典 - 詞典 –
bryanmac
如果我理解正確,hastable和哈希函數一樣好。就我的例子而言,字典就足夠了。如果不使用良好的散列函數,則僅使用1個CPU進行比較搜索可能會讓我感到無用。 – user973156