从未使用过变量优化



如果有人问我,我不会舒尔。我找不到它。

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

第一次初始化更快吗?剂量第二个在编译时得到优化。(假设从不使用可变示例(

第一次初始化更快吗?

没有任何意义重大的方式,所以为什么还要关心呢?但是,为了让您感到幽默,这两个选项的 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();
}
我会

说编译器在这种情况下做什么无关紧要。

事实上,毫无疑问,在

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

通常,您可以使用对象来更好地处理和表示数据,保留引用,并通过有用的开发样式和设计模式(如依赖项注入(受益。

否则,仅使用方法或静态帮助程序可能就足够了。

最新更新