C#でDictionaryを扱う際に値の追加や値の取得を行う場合の速度を比較するためにテスト用のコードを作成しました。
TryAddのメソッドを使用して値を追加するケース、ContainsKeyのメソッドを使用してキーの有無を確認してから値を追加するケースを確認しています。 また、既に辞書にキーが存在する場合の速度計測も行うことができます。
TryGetValueのメソッドを使用して値を取得するケース、ContainsKeyのメソッドを使用してキーの有無を確認してから値を取得するケースを確認しています。 存在しないキーを指定する場合の速度計測も行うことができます。
UnityにてSampleSceneを開いて、ゲームを実行することで各ケースの速度比較を行うことができます。
実行後の1フレーム目は別クラスの諸々の処理が重なることが多いため、フレームカウントが指定の値になったタイミングで処理を実行します。
DictionarySpeedのゲームオブジェクトにアタッチしてあるDictionarySpeedTestのスクリプトからフレームカウントの指定、平均をとる試行回数を指定できます。
実行後はAssetsフォルダの下にcsv形式で実行結果のファイルが出力されます。
- TryAddのメソッドを使用して値を追加
- TryAddのメソッドを使用して値を追加(キー重複あり)
- ContainsKeyのメソッドを使用してキーの有無を確認してから値を追加
- ContainsKeyのメソッドを使用してキーの有無を確認してから値を追加(キー重複あり)
また、Dictinaryの要素数が変更されることでCapacityの変更が発生するため、格納用Dicrionaryを初期化する際にCapacityを指定するモードもあります。(サンプルでは値の追加時にCapacityを指定するケース、指定しないケースの2パターンを実行しています)
- TryGetValueのメソッドを使用して値を取得
- TryGetValueのメソッドを使用して値を取得(存在しないキーを指定)
- ContainsKeyのメソッドを使用してキーの有無を確認してから値を取得
- ContainsKeyのメソッドを使用してキーの有無を確認してから値を取得(存在しないキーを指定)