非完整测试,因为工作需要,仅测试添加1百万数据耗时,以及从这些数据中查询Keys.Contains(xxx)耗时。
测试结果:
添加一百万个string到Dictionary中耗时大约在600~800ms,使用Dictionary.Keys.Contains(xxx)查询耗时不到1ms(无论查询元素是否包含在Dictionary中,耗时都差不多,都在几百到几十个ticks,10 ticks=1us)。
测试代码:
Dictionary<string, string> dic = new Dictionary<string, string>();
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine("--------add 1M data to dict cost(ms)---------");
for (int i = 0; i < 1000000; i++)
{
dic[i.ToString()] = (i+1).ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+" ms");
Console.WriteLine("---------add 1 data to 1M dict cost(ms)-----------");
sw.Restart();
dic["a"] = "a";
sw.Stop();
Console.WriteLine(sw.ElapsedTicks + " ticks");
Console.WriteLine("---------query Dict.Contains each time cost(ms)---------");
bool res = false;
for (int i = 0; i < 5; i++)
{
sw.Restart();
res = dic.Keys.Contains((i + 500000).ToString());
sw.Stop();
Console.WriteLine(sw.ElapsedTicks+" ticks");
Console.WriteLine("xxxxxxxxxx");
}
Console.WriteLine("---------query Dict.Contains (not Contains) each time cost(ms)---------");
bool res1 = false;
for (int i = 0; i < 5; i++)
{
sw.Restart();
res1 = dic.Keys.Contains((i + 1000000).ToString());
sw.Stop();
Console.WriteLine(sw.ElapsedTicks+" ticks");
Console.WriteLine("xxxxxxxxxx");
}