从未使用过变量优化

时间:2018-04-16 13:25:12

标签: c# performance compilation

如果有人问过这个问题,我不会感到害羞。我找不到了。

class Program
{
    static void Main(string[] args)
    {
        new ExampleClass();
        ExampleClass example = new ExampleClass();
    }
}
class ExampleClass
{
    public ExampleClass()
    {
        //Do Stuff
    }
}

第一次初始化更快?第二个在编译时获得优化。 (因为从未使用过可变的例子)

2 个答案:

答案 0 :(得分:2)

  

第一次初始化更快?

没有任何远程重要的方式,所以为什么要关心?但是,只是为了幽默你,两个选项的IL输出,当用优化编译时,是相同的:

// Methods
.method private hidebysig static 
    void Main (
        string[] args
    ) cil managed 
{
    // Method begins at RVA 0x2050
    // Code size 7 (0x7)
    .maxstack 8

    IL_0000: newobj instance void ExampleClass::.ctor()
    IL_0005: pop
    IL_0006: ret
} // end of method Program::Main

所以不,没有区别。

  

假设从未使用过可变的例子

为什么要实例化一个你永远不会使用的对象?如果你想要实现的只是运行一些初始化逻辑,那么实现一个恰当命名的静态方法:

class ExampleClass
{
     static void Initialize() { // do stuff }
}

你以一种不那么令人不安的方式称呼它:

static void Main(string[] args)
{
    ExampleClass.Initialize();
}

答案 1 :(得分:0)

我想说这与编译器在这种情况下的作用无关。

实际上,毫无疑问,在这两种情况下都会执行ExampleClass构造函数中的代码。 可能是编译器在这个非常具体(而且相当简单)的场景中优化了内存使用,但是如果从未使用过变量,那么为什么要创建一个ExampleClass的新实例呢?您可能更喜欢实用方法或帮助程序(可能是静态的)。

通常,您使用对象来更好地处理和表示数据,保留引用并从有用的开发样式和设计模式中受益,例如Dependency Injection

否则,仅使用方法或静态助手就足够了。