題名 | 著者 | 日付 | CREATETIME | カテゴリ |
---|---|---|---|---|
前TryGetValueにContainsKeyのC#辞書辞書は、性能比較の取得を決定します
|
lindexi
|
2019年11月29日十時13分19秒0800
|
2018年9月8日午後三時33分40秒0800
|
C#の
|
本明細書で使用されるbenchmarkdotnetの性能試験辞書の使用価値を得るために、その後、本明細書で2つのパフォーマンス分析の書き込み、書き込みの二つの異なる方法を使用することも可能です。
プレゼンス決意値、値が取得された値は、次の2つの異なる使用方法に存在する場合
一つの方法は、TryGetValueは、以下を参照してくださいコードを使用することです
もし(辞書。TryGetValue(XX、アウト するvar FOO))
{
}
もう一つの方法は、取得したがあるかどうかを決定することで、次のコードを検討
もし(辞書。にContainsKey(XX))
{ 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メソッド()+ " - "
+ I。ToStringメソッド()] = 走りました。次の()。ToStringメソッド();
もし(!セット)
{ 場合(RAN。次()< I)
{ セット= 真 ;
LazyDictionary [ " lindexi " ] = "逗比"。
}
}
[
}
}
ベンチマーク ]
公共 ボイド TryGetExist()
{ 場合(LazyDictionary。TryGetValue(" lindexi "、アウトするvar FOO))
{ _foo = FOO。
}
}
[ ベンチマーク ]
公共ボイドContainGetExist()
{ 場合(LazyDictionary。にContainsKey(" lindexi "))
{ _foo = LazyDictionary [ " lindexi " ]。
}
}
[ ベンチマーク ]
公共ボイドTryGetNoExist()
{ 場合(LazyDictionary。TryGetValue(" lindexi123 "、アウトするvar FOO))
{ _foo = FOO。
}
}
[ ベンチマーク ]
公共
ボイド ContainGetNoExist()
{ 場合(LazyDictionary。にContainsKey(" lindexi123 "))
{ _foo = LazyDictionary [ " lindexi123 " ]。
}
} プライベートオブジェクト_foo。プライベート辞書 < 文字列、オブジェクト > LazyDictionary { 取得します。} = 新しい辞書 < 文字列、
オブジェクトを>();
}
私のブログは、それらのすべてを招いて、テンセントクラウド+コミュニティに同期取り扱いについてです定住:https://cloud.tencent.com/developer/support-plan?invite_code=19bm8i8js1ezb