在int i =0和int i = default(int)之间是否存在性能差异?

本文关键字:int 性能 存在 是否 default 之间 | 更新日期: 2023-09-27 18:02:33

我正在创建一个整数,我想在使用之前用0实例化它

我先写的

int i = default(int);

,然后我把它去掉,替换成另一个

int i = 0;

我想知道我的选择是否是最好的mini mini性能。default()函数会在编译时增加指令吗?

在int i =0和int i = default(int)之间是否存在性能差异?

不,它们在编译时被解析并产生相同的IL。值类型将是0(或false,如果你有一个bool,但这仍然是0)和引用类型是null

Marlon的答案在技术上是正确的,但是每个选项之间应该有明确的语义差异。

int i = 0;
当要对整数进行数学运算时,将

初始化为文字0在语义上是有意义的,并且该运算需要以变量为特定的0值开始。一个很好的例子是创建一个索引计数器变量;你要从0开始,然后开始计数。

int i = default(int);

将变量设置为其default值是有意义的,例如,当您使用所述变量创建一个类时,您知道该变量将在稍后的过程中手动设置。下面是一个例子(不管它可能多么不切实际):

class IntegerClass
{
    private int value;
    public IntegerClass(int value)
    {
        this.value = value;
    }
    public void Reset()
    {
        this.value = default(int);
    }
}

同样,它们在技术上是相等的(实际上会编译成相同的CIL),但每个都提供不同的语义含义。

而且,在使用泛型时,可能需要使用default来初始化变量。

public T SomeOperation<T>()
{
    T value = default(T);
    this.SomeOtherOperation(ref value);
    return T;
}

唯一真正的区别是编译时间,所以我想当你按Debug或Compile时,它会比另一种方式快毫毫毫毫毫毫毫毫秒但一旦编译完成,它就会和Marlon说的完全一样

这些小的改变只会影响你的实际编程时间,所以从更广泛的意义上来说,输出default(int)比写0要慢,而且你花在它上面的时间甚至更长。