Dictionaryと配列検索効率の比較
8242 ワード
今日は、先日の汎用データベース・アクセス・エンティティ・クラスで、付与と値の取得の効率を考えて、今日は小さなプログラムを書いてテストしました.
テストプログラムコード:
プログラムの実行結果:
配列付与開始時間: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
テストプログラムコード:
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