快速实例化价值类型和参考类型的成本

时间:2014-08-21 18:42:23

标签: c# performance types declaration instantiation

//Option 1:
int _a;
while (_running)
{
    _a = _number;
    while (_doingWork)
    {
        //work involving a
    }
}

//Option 2:
while (_running)
{
    int _a = _number;
    while (_doingWork)
    {
        //work involving a
    }
}

编辑:拿出选项3,我现在看到它无关紧要

主要问题:

  1. 我试图了解上述哪一项更可取,也许更具体地说明性能如何影响您声明和实例化变量的位置
  2. 如果这些是引用类型而不是原始值类型怎么办(切换出" int _a"使用" Person _a = new Person()")。情景如何在性能方面有所不同?如果愿意,会有哪些?
  3. 其他问题:

    1. 对于原始值类型,是否存在构造函数?
    2. 实例化基元和常规值类型(例如结构)之间的性能是否存在差异
    3. 事实:

      • int是原始值类型
      • " int a = new int();"与" int a = 0;"
      • 相同
      • 您可以在不使用 new 指令的情况下实例化值类型,但这意味着将调用默认的无参数构造函数,因此在结构的情况下,您必须在结构中具有该构造函数。此外,您必须手动设置结构中的每个字段
      • "新"并不暗示"在堆上创建对象"在C#中 - 它只是暗示"调用构造函数"。对于没有创建新对象的值类型,它只是初始化一个新值。 (参考:Jon Skeet)

      编辑2:如果其他人偶然发现这个问题,我发现这是相关的: Difference between declaring variables before or in loop?

1 个答案:

答案 0 :(得分:2)

C#在函数进入函数时为函数中的所有变量创建一个内存位置。如果你经历一个循环,它不会重新初始化内存位置,所以1和2完全相同。对于3,如果你需要每次都通过该循环设置它,那么这就是你需要的。否则在适当时设置它。并根据他们的范围应该是什么,而不是你认为有助于提高绩效。

相关问题