C# 对象初始化之间的性能差异

本文关键字:性能 之间 对象 初始化 | 更新日期: 2023-09-27 18:34:20

这可能是

重复的,但我无法从提问时提出的建议中找到与我的问题完全匹配的内容:

C# 中的以下内容之间是否存在很大的性能差异(如果有):

var object = new object();
object.propx = x;
object.propy = y;

var object = new object { propx = x, propy = y};

C# 对象初始化之间的性能差异

不,没有区别,因为它会导致相同的 IL。

编译以下内容:

class Program
{
    static void Main(string[] args)
    {
        var objectA = new Test();
        objectA.PropA = 1;
        objectA.PropB = 10;
        var objectB = new Test() { PropA = 2, PropB = 20 };
    }
}
public class Test
{
    public int PropA { get; set; }
    public int PropB { get; set; }
}

将生成以下 IL(发布模式):

IL_0000: newobj instance void InitTest.Test::.ctor()
IL_0005: dup
IL_0006: ldc.i4.1
IL_0007: callvirt instance void InitTest.Test::set_PropA(int32)
IL_000c: ldc.i4.s 10
IL_000e: callvirt instance void InitTest.Test::set_PropB(int32)
IL_0013: newobj instance void InitTest.Test::.ctor()
IL_0018: dup
IL_0019: ldc.i4.2
IL_001a: callvirt instance void InitTest.Test::set_PropA(int32)
IL_001f: dup
IL_0020: ldc.i4.s 20
IL_0022: callvirt instance void InitTest.Test::set_PropB(int32)
IL_0027: pop
IL_0028: ret

创建实例后,两者都以相同的方式调用 setter 方法。