想象一下代码:
public class obj
{
// elided
}
public static Dictionary<string, obj> dict = new Dictionary<string, obj>();
方法1
public static obj FromDict1(string name)
{
if (dict.ContainsKey(name))
{
return dict[name];
}
return null;
}
方法2
public static obj FromDict2(string name)
{
try
{
return dict[name];
}
catch (KeyNotFoundException)
{
return null;
}
}
我很好奇这两个函数的性能是否有差异,因为第一个函数应该比第二个函数慢——假设它需要两次检查字典是否包含值,而第二个函数只需要访问字典一次,但哇,实际上是相反的:
循环1 000 000个值(其中10 000个存在,90 000个不存在):
第一个函数:306毫秒 第二个函数:20483毫秒
为什么呢?
编辑:正如您可以在这个问题下面的评论中注意到的那样,在没有0个不存在的键的情况下,第二个函数的性能实际上比第一个函数略好。但一旦存在至少1个或多个不存在的密钥,第二个密钥的性能就会迅速下降。