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

时间:2014-12-16 16:18:27

标签: c#

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

c#中的以下内容之间存在很大的性能差异:

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

VS

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

1 个答案:

答案 0 :(得分:1)

不,没有区别,因为它会产生相同的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方法。