在无限循环性能中声明变量类型?

时间:2014-01-14 15:11:52

标签: c# performance scope

根据一些Stack Overflow问题的答案,我已经读到了在循环中使用对象声明,比在它之外做它更好,性能方面。

我无法理解为什么,因为当我在循环中使用声明时,我的软件会使用更多的RAM,然后是循环之外的声明。

while (true) {
    String hey = "Hello.";
}

Ram使用量:1820kb

String hey;
while (true) {
    hey = "Hello.";
}

Ram使用量:1720kb

为什么人们说我应该使用第一个循环因为它的性能更好,但是它从ram中使用了100kb以上?

3 个答案:

答案 0 :(得分:6)

在.NET中的发布模式下运行代码时,由于名为loop invariant code motion的编译器优化技术,这两段代码是相同的。 JIT优化器中有大量的智能优化技术可以“修复”您的代码。因此,原则上你应该优先于代码中的可读性/简单性。

答案 1 :(得分:5)

两种选择之间绝对没有区别。它们被编译为相同的IL代码。

答案 2 :(得分:1)

除了开发人员的观点,编译器是唯一关心的人。如果将声明放在块中,则可以使编译器更容易进行注册表分配,因为更明显的是变量的使用范围是什么。但是,嘿,编译器今天很聪明,你不会有太大的不同(参见@Bas Brekelmans提到的循环不变代码运动)。

您不能依赖评论中建议的简单测量。如果RAM使用之间确实存在确定性差异,我的猜测是编译器会在两个版本的某个地方做出不同的决定,无论如何都会启发式。

总而言之,总是更喜欢可读性和优化,尤其是这种低级细节。编译器比你做得更好。