要说清楚,下面的代码执行类似或后者可能更快吗? CLR会从字典中缓存循环结果吗?我知道我们应该在这种特殊情况下使用switch,但如果我能更好地了解CLR将对字典查找结果缓存做什么,那就更好了
foreach (string columnName in csvReader.ReadFields())
{
if (FieldType.Int == fieldTypes[columnName])
{
//do something
}
else if (FieldType.Double == fieldTypes[columnName])
{
//do something
}
else if (FieldType.Datetime == fieldTypes[columnName])
{
//do something
}
.....
.....
.....
}
VS
foreach (string columnName in csvReader.ReadFields())
{
FieldType fieldType = fieldTypes[columnName];
if (FieldType.Int == fieldType )
{
//do something
}
else if (FieldType.Double == fieldType)
{
//do something
}
else if (FieldType.Datetime == fieldType )
{
//do something
}
.....
.....
.....
}
答案 0 :(得分:2)
索引器是方法,不能省略方法调用。所以不,编译器/运行时不会将3个方法调用合并为一个。 (更新:某些索引器可能被内联,如果它们足够简单则会被删除,但Dictionary
不太可能发生这种情况的索引器)。
然而,字典在不断的O(1)时间内执行随机访问,因此这里的性能确实不是问题(除非我们正在谈论微优化,其中常数因素可能很重要)。 / p>
我会选择最易读的方法 - 其中,IMO是第二个。