【发布时间】:2011-05-13 06:44:57
【问题描述】:
teo sn-ps 有什么区别?
片段 1:
{
Dictionary<MyCLass, bool> dic;
MyFunc(out dic);
}
片段 2:
{
Dictionary<MyCLass, bool> dic = null;
MyFunc(out dic);
}
sn-p 2 性能更好吗?
【问题讨论】:
标签: c#
teo sn-ps 有什么区别?
片段 1:
{
Dictionary<MyCLass, bool> dic;
MyFunc(out dic);
}
片段 2:
{
Dictionary<MyCLass, bool> dic = null;
MyFunc(out dic);
}
sn-p 2 性能更好吗?
【问题讨论】:
标签: c#
从技术上讲,第二个代码 sn-p 通过执行冗余的null 集可能会比第一个代码执行更多的指令。我在这里用 likely 对冲,因为 C# 规范可能允许忽略此集合的灵活性。我不知道手头。
但是我会严重怀疑这会明显影响应用程序的性能。我当然不会为这种优化编写代码,而是更喜欢我发现更容易理解的解决方案。
【讨论】:
dic 作为out 参数传递。这意味着MyFunc 中的代码如果不先写入就无法访问现有值。因此,原始函数或 MyFunc 都无法看到 null 值,这是多余的。
如果您尚未测量应用程序的性能,请不要担心这些。
这样的事情不太可能产生巨大的影响,事实上,与你写的其他行相比,大多数时候这样的事情不会被注意到。
先衡量,他们担心性能。
【讨论】:
我喜欢 sn-p 2,它更慢但减少错误的做法更好,总的来说是一个好习惯 - 显式地初始化变量。也许甚至 JIT 也可以在访问时对其进行优化,因此您只会在编译和加载时而不是在执行时损失一点性能(但我尚未验证此调试器/反汇编器,但 JIT 对于计算机来说非常“智能”程序,所以它也许能够做到)
【讨论】:
编译它们并比较 IL。我想它会是一样的。在将 out 参数传递给被调用方法之前,应将 out 参数的存储初始化为零(如果是引用类型,则为 null)。
【讨论】: