![](/img/trans.png)
[英]How to recast objects from a Dictionary(Of String, Object) in VB.Net
[英]Performance of Dictionary(Of String, SomeReferenceType) in VB.NET
從/到Dictionary(Of String,SomeReferenceType)讀取/添加值的性能如何取決於已輸入的記錄數? 我的意思是,當n變大時,O(1),O(log n),O(n)或其他方式的時間會增加嗎?
Dim index As New Dictionary(Of String, SomeReferenceType)
' N entries added in a loop
' ...
Dim id As Integer = 123456789 ' 9-digit number
Dim key As String = id.ToString()
Dim value As New SomeReferenceType
index(key) = value ' Need to estimate this
value = index.TryGetValue(key) ' and this operations depending on N (for large N)
此外,如果缺乏記憶會發生什么? 我們應該在輸入元素之前設置字典的容量,以避免在沒有足夠的內存空間的情況下復制它嗎? 這個操作需要多長時間(如果需要,將字典復制到新的地方)取決於N?
從Dictionary
獲取項目的性能受項目數量的影響很小。 這些項目根據其哈希碼分為多個桶,因此每個桶中通常只有一個或幾個項目。 該操作接近O(1)操作。
添加項目也接近O(1)操作。 如果必須增加容量,您將獲得性能損失,但平均值非常小。 由於每次容量增加一倍,增加容量時移動的數據量實際上並不多。 數據平均移動了1.3倍,因此每次添加的平均額外工作量下降到大約16個字節。
如果你知道Dictionary
會有多大,或者只是有一個不錯的估計,你應該在創建它時使用它,以減少或消除增加容量的需要。
Dictionary
是用Hastables實現的 - 因此O(1)。
SortedDictionary
使用二叉樹(紅色/黑色)實現 - 因此O(log n)
SortedList
使用列表+二進制搜索實現 - 因此O(n)
所有字典都會自動增加它們的大小(性能在這里是O(n)但這種情況不會經常發生,因為大小是智能預先計算的,所以無論如何大致的性能是O(1) - 見這個 )
只需谷歌他們,並查看微軟文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.