Dictionary#TryGetValueメソッドはそんなに早いのか?
.NET Framework 2.0から追加されたという噂のメソッドTryGetValueがどれだけ速いのかを試してみたテスト。正直.NET Framework 2.0で追加されたメソッドなんて使い古されてる感が有りますが、ちょっと試してみたくなったのでつい。
比較対象は以下。
- Dictionary#TryGetValueで値を取得
- Dictionaryインデクサで値を取得
実際に以下のコードで速度を測ってみました。
public class MainClass { public static void Main(string[] args) { var openWith2 = new Dictionary<string, string>(){ {"txt", "notepad.exe"}, {"bmp", "paint.exe"}, {"dib", "paint.exe"}, {"rtf", "wordpad.exe"} }; string val = string.Empty; DateTime start = DateTime.Now; for (int i = 0; i < 5000; i++) { openWith2.TryGetValue("aaa", out val); } DateTime middle = DateTime.Now; for (int i = 0; i < 5000; i++) { try { val = openWith2["aaa"]; } catch { } } DateTime end = DateTime.Now; Console.WriteLine("TryGetValueでの取得時間 = {0}ms", (middle - start).TotalMilliseconds ); Console.WriteLine("インデックスでの取得時間 = {0}ms", (end - middle).TotalMilliseconds); Console.Read(); } } //TryGetValueでの取得時間 = 2ms //インデックスでの取得時間 = 15420ms
試しに測ってみたけど物凄い差・・・。やはり例外処理が重いというのは間違いないようで・・・。