簡體   English   中英

如果只需要讀取一次,則在查找后從C#Dictionary中刪除項目的任何性能優勢

[英]Any performance benefits to removing items from C# Dictionary after lookup if they only need to be read once

我有一個以字符串為鍵的對象字典。 此詞典首先填充了50到數萬個條目。 稍后我的程序在這個字典中查找值,並且在字典中找到一個項目后,我不再需要保留我剛才在字典中找到的對象。 我的問題是,如果我不再使用字典中的條目,可能會減少內存使用量或者只是稍微加快后續查找,或者花費額外的時間,我是否能夠獲得更好的總執行時間?刪除項目會更有影響力嗎?

我理解這個問題的答案可能取決於某些細節,例如對字典進行了多少次查找,密鑰的大小以及對象的大小,我將嘗試在下面提供這些,但是是否有一般答案這個? 是否有必要以這種方式嘗試提高性能,或者是否存在這樣的好主意?

鍵是可變長度字符串,可以是6個字符或~20個字符。 總查找完全在空中,我可能只需要檢查50x左右,或者我可能必須完全獨立於字典的大小看10K次,即字典可能有50個項目,我可能會進行10K查找,或者我可能有10K項目,只能進行50次查找。

另外一個注意事項是,如果我從字典中刪除項目並且我留下了一個空字典,那么我可以發信號給等待的線程,在我處理其余項目時不再等待我(包括解析長文本文件)同時查找字典中的項目以確定如何處理已解析的數據)。

字典查找基本上是O(1)。 從字典中刪除項目對查找速度的影響很小(如果有的話)。

最后,移除物品的速度很可能比讓它們留下更慢。

我建議刪除項目的唯一原因是,如果您需要減少內存占用。

我在DotNetPerls上發現了一些與您的問題有關的有趣內容。

將鍵添加到詞典的順序非常重要。 它會影響訪問這些密鑰的性能。 因為Dictionary使用鏈接算法,所以最后添加的鍵通常更快找到。

http://www.dotnetperls.com/dictionary-order

字典大小會影響查找性能。 較小的字典比較大的字典更快。 當測試兩者中始終存在的密鑰時,就會出現這種情況。 減少字典大小有助於提高性能。

http://www.dotnetperls.com/dictionary-size

我認為這最后的花絮非常有趣。 考慮到我的密鑰長度,我沒有想到。

通常,較短的[key]字符串比較長的字符串表現更好。

http://www.dotnetperls.com/dictionary-string-key

好問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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