C#CLR缓存字典查找结果吗?

时间:2014-11-07 10:50:21

标签: c# performance dictionary

要说清楚,下面的代码执行类似或后者可能更快吗? 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
                }
                .....
                .....
                .....
            }

1 个答案:

答案 0 :(得分:2)

索引器是方法,不能省略方法调用。所以不,编译器/运行时不会将3个方法调用合并为一个。 (更新:某些索引器可能被内联,如果它们足够简单则会被删除,但Dictionary不太可能发生这种情况的索引器)。

然而,字典在不断的O(1)时间内执行随机访问,因此这里的性能确实不是问题(除非我们正在谈论微优化,其中常数因素可能很重要)。 / p>

我会选择最易读的方法 - 其中,IMO是第二个。