在C#中创建新模型和设置属性的最快方法是什么?

时间:2017-07-04 10:42:53

标签: c# properties instantiation

我想知道这两种方法中哪一种实例化一个类/模型,并在C#中设置属性是最快的,并且使用的资源更少。

假设类TestClass有一个名为Info的字符串属性。

var instantiatedClass = new TestClass();
instantiatedClass.Info = "Information";

var instantiatedClass = new TestClass {
    Info = "Information"
}

当然,我想知道哪个是最快的,当你必须设置10个以上的属性时。 以上只是为了说明。

谢谢

(如果这篇文章中的任何内容可能更好,请发表评论)

1 个答案:

答案 0 :(得分:4)

第二个片段只是语法糖。在幕后,对于编译器而言,它几乎都生成相同的IL代码。

所以使用什么代码并不重要,最终结果(在性能方面)将保持不变。

第一个代码段IL代码

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       20 (0x14)
  .maxstack  2
  .locals init ([0] class SO.TestClass instantiatedClass)
  IL_0000:  nop
  IL_0001:  newobj     instance void SO.TestClass::.ctor()
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  ldstr      "Information"
  IL_000d:  callvirt   instance void SO.TestClass::set_Info(string)
  IL_0012:  nop
  IL_0013:  ret
} // end of method Program::Main

第二个代码段IL代码

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       20 (0x14)
  .maxstack  3
  .locals init ([0] class SO.TestClass instantiatedClass)
  IL_0000:  nop
  IL_0001:  newobj     instance void SO.TestClass::.ctor()
  IL_0006:  dup
  IL_0007:  ldstr      "Information"
  IL_000c:  callvirt   instance void SO.TestClass::set_Info(string)
  IL_0011:  nop
  IL_0012:  stloc.0
  IL_0013:  ret
} // end of method Program::Main