Dictionaryと配列検索効率の比較

8242 ワード

今日は、先日の汎用データベース・アクセス・エンティティ・クラスで、付与と値の取得の効率を考えて、今日は小さなプログラムを書いてテストしました.
テストプログラムコード:
int Count = 1000000;
            string findName = "Field" + (Count-1).ToString();
            DataEntity[] _ArrTestStr = new DataEntity[Count];
            Dictionary<string, DataEntity> _DictionaryTest = new Dictionary<string, DataEntity>();
            StringBuilder content = new StringBuilder();
            DateTime beginDateTime = DateTime.Now;
            // 
            for (int i = 0; i < Count; i++)
            {
                DataEntity de = new DataEntity();
                de.Value = i.ToString();
                de.Field = "Field" + de.Value;
                _ArrTestStr[i] = de;
            }
            DateTime endDateTime = DateTime.Now;
            content.Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                 .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            beginDateTime = DateTime.Now;
            for (int i = 0; i < Count; i++)
            {
                DataEntity de = new DataEntity();
                de.Value = i.ToString();
                de.Field = "Field" + de.Value;
                _DictionaryTest.Add(de.Field, de);
            }
            endDateTime = DateTime.Now;
            content.Append(" Dictionary :").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                  .Append(" Dictionary :").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            int index = 0;
            DataEntity NewDE = null;
            beginDateTime = DateTime.Now;
            while (index<Count)
            {
                if (_ArrTestStr[index].Field == findName)
                {
                    NewDE = _ArrTestStr[index];
                    break;
                }
                index++;
            }
            endDateTime = DateTime.Now;
           
            content.Append("").AppendLine(NewDE.Value)
                .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                 .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));


            beginDateTime = DateTime.Now;
            NewDE = _DictionaryTest[findName];
            endDateTime = DateTime.Now;
            content.Append("Dictionary :").AppendLine(NewDE.Value)
               .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"))
                .Append("").Append(beginDateTime.Ticks).AppendLine(beginDateTime.ToString("yyyy-MM-dd HH:mm:ss fff"));
            textBox1.Text = content.ToString();

プログラムの実行結果:
配列付与開始時間:634819659844112012-08-30 23:16:38 491配列付与終了時間:634819659844112012-08-30 23:16:38 491 Dictionary付与開始時間:63481965339953710 2012-08-30 23:16:39 537 Dictionary付与終了時間:634819653399537102012-08-30 23:16:39 537配列検出値:9999検索開始時間:634819654401086655912-08-30 23:16:41 086調査終了検索時間:63481965408655962012-08-30 23:16:41 086 Dictionary検索した値は:99999検索開始時間:634819654011756192012-08-30 23:16:41 127検索終了時間:63481965411756192012-08-30 23:16:41 127検索終了時間:63481965411756192012-08-30
 
 
結論:付与と検索効率は基本的に同じで、10万回循環した.
転載先:https://www.cnblogs.com/shunhe316/archive/2012/08/30/2664667.html