编译器会优化此代码,还是在每次方法调用后初始化集合?
private string Parse(string s)
{
var dict = new Dictionary<string, string>
{
{"a", "x"},
{"b", "y"}
};
return dict[s];
}
如果答案是否定的,我建议使用以下解决方案:在C#中创建常量字典
当出现这样的问题,而您不确定答案是什么时,“在幕后”看起来总是很好。
这是在打开优化器的情况下编译器生成的IL:
Parse:
IL_0000: newobj System.Collections.Generic.Dictionary<System.String,System.String>..ctor
IL_0005: stloc.1 // <>g__initLocal0
IL_0006: ldloc.1 // <>g__initLocal0
IL_0007: ldstr "a"
IL_000C: ldstr "x"
IL_0011: callvirt System.Collections.Generic.Dictionary<System.String,System.String>.Add
IL_0016: ldloc.1 // <>g__initLocal0
IL_0017: ldstr "b"
IL_001C: ldstr "y"
IL_0021: callvirt System.Collections.Generic.Dictionary<System.String,System.String>.Add
IL_0026: ldloc.1 // <>g__initLocal0
IL_0027: stloc.0 // dict
IL_0028: ldloc.0 // dict
IL_0029: ldarg.1
IL_002A: callvirt System.Collections.Generic.Dictionary<System.String,System.String>.get_Item
IL_002F: ret
如您所见,它调用newobj
分配Dictionary<K,V>
时间,同时加载本地变量和Dictionary.Add
每次调用它们(这是call的语法上的糖当量Add
)。对于缓存对象创建,它不了解类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句