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