簡體   English   中英

VB.NET中Dictionary(Of String,SomeReferenceType)的性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM