2019年11月29日-C位 - -TryGetValue-辞書-Dictionary- -ContainsKey-は、第1の性能比較を決定します-Get-

オリジナル: 2019年11月29日- C#の- -TryGetValue-辞書-Dictionary-性能比較の前に決意の-ContainsKey-その後、-Get-

題名 著者 日付 CREATETIME カテゴリ
前TryGetValueにContainsKeyのC#辞書辞書は、性能比較の取得を決定します
lindexi
2019年11月29日十時13分19秒0800
2018年9月8日午後三時33分40秒0800
C#の

本明細書で使用されるbenchmarkdotnetの性能試験辞書の使用価値を得るために、その後、本明細書で2つのパフォーマンス分析の書き込み、書き込みの二つの異なる方法を使用することも可能です。

プレゼンス決意値、値が取得された値は、次の2つの異なる使用方法に存在する場合

一つの方法は、TryGetValueは、以下を参照してくださいコードを使用することです

            もし辞書TryGetValueXXアウト するvar  FOO))
            { 
            }

もう一つの方法は、取得したがあるかどうかを決定することで、次のコードを検討

もし辞書にContainsKeyXX))
{ VARのFOO = 辞書 [ XX ]。
}
	   

だから、それが使用され、本明細書benchmarkdotnet 2つのテスト方法の性能

以下に、試験データ、最終製品のテストコードです。TryGetExistがここにあります値を取得しようとすることです。この値を取得しようとするがある場合ContainGetExistは、価値があるかどうかを決定することです。

BenchmarkDotNet = v0.10.14、OS = Windowsの10.0.17134 
のIntel Core i7-6700 CPUの3.40GHz(Skylakeマイクロアーキテクチャ)、8つの論理及び4物理コア1つのCPU、周波数 = 3328130ヘルツ、解像度 = 300.4690 NS、タイマ = TSC 
  [ホスト]: .NET Frameworkの4.7(CLR 4.0.30319.42000)、64 RyuJIT-v4.7.3132.0 [AttachedDebugger] 
  DefaultJob:の.NET Framework 4.7(CLR 4.0.30319.42000)、64 RyuJIT-v4.7.3132.0


方法 平均 エラー STDDEV 中央値
TryGetExist 30.26 NS 0.6057 NS 0.5949 NS 30.11 NS
ContainGetExist 46.36 NS 1.0883 NS 3.1919 NS 44.90 NS
TryGetNoExist 20.23 NS 0.4661 NS 0.7658 NS 19.93 NS
ContainGetNoExist 18.68 NS 0.2569 NS 0.2403 NS 18.66 NS

また、あるパフォーマンスConcurrentDictionaryスレッドセーフなクラスを比較し、辞書には、ConcurrentDictionary上のFooクラスをテストします、次のテストデータを変更しないで、あなたはパフォーマンスがTryGetValueを使用することをお勧めまだ見ることができる他のコードに置き換え

BenchmarkDotNet = v0.10.14、OS = Windowsの10.0.17134 
のIntel Core i7-6700 CPUの3.40GHz(Skylakeマイクロアーキテクチャ)、8つの論理及び4物理コア1つのCPU、周波数 = 3328130ヘルツ、解像度 = 300.4690 NS、タイマ = TSC 
  [ホスト]: .NET Frameworkの4.7(CLR 4.0.30319.42000)、64 RyuJIT-v4.7.3132.0 [AttachedDebugger] 
  DefaultJob:の.NET Framework 4.7(CLR 4.0.30319.42000)、64 RyuJIT-v4.7.3132.0


方法 平均 エラー STDDEV 中央値
TryGetExist 31.20 NS 0.4644 NS 0.3625 NS 31.17 NS
ContainGetExist 66.80 NS 2.4692 NS 7.2806 NS 63.84 NS
TryGetNoExist 20.07 NS 0.1254 NS 0.1112 NS 20.04 NS
ContainGetNoExist 27.63 NS 0.4230 NS 0.3956 NS 27.65 NS

すべてのコード

    パブリック クラス Fooの 
    { /// < inheritdoc /> 公共のFoo()
        { VARのRAN = 新しいランダム();
            ブールセット=  ;
            INT iは= 0 ; I < 100000 ; I ++
            { LazyDictionary [ RAN次の()。ToStringメソッド()+ " - "
        
         
                        
                  +  IToStringメソッド()] =  走りました次の()。ToStringメソッド();
                もしセット
                { 場合RAN()< I
                    { セット=  ;
                        LazyDictionary [ " lindexi " ] = "逗比"
                    } 
                } 
        [
                     
                            
            }
        }
ベンチマーク ]
         公共 ボイド TryGetExist()
        { 場合LazyDictionaryTryGetValue" lindexi "アウトするvar FOO))
            { _foo = FOO
            } 
        } 
        [ ベンチマーク ]
         公共ボイドContainGetExist()
        { 場合LazyDictionaryにContainsKey" lindexi "))
              
                  
  
            
            { _foo = LazyDictionary [ " lindexi " ]。
            } 
        } 
        [ ベンチマーク ]
         公共ボイドTryGetNoExist()
        { 場合LazyDictionaryTryGetValue" lindexi123 "アウトするvar FOO))
            { _foo = FOO
            } 
        } 
        [ ベンチマーク ]
         公共
                  

  
              
                  
 ボイド ContainGetNoExist()
        { 場合LazyDictionaryにContainsKey" lindexi123 "))
            { _foo = LazyDictionary [ " lindexi123 " ]。
            } 
        } プライベートオブジェクト_fooプライベート辞書 < 文字列オブジェクト > LazyDictionary { 取得します} = 新しい辞書 < 文字列
            
                  

          

           オブジェクトを>(); 

    }

私のブログは、それらのすべてを招いて、テンセントクラウド+コミュニティに同期取り扱いについてです定住:https://cloud.tencent.com/developer/support-plan?invite_code=19bm8i8js1ezb

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12075837.html