2017-07-04 15 views
0

私はこれらの2つの方法のどれがクラス/モデルをインスタンス化し、C#でプロパティを設定するのが最も速く、より少ないリソースを使用するのか疑問に思っていました。C#で新しいモデルとプロパティを作成する最も速い方法は何ですか?

セイクラスTestClassには、Infoという文字列プロパティがあります。もちろん

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

または

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

あなたは10+プロパティを言わ設定する必要があるとき、私は、最速であるかを知りたいです。 上記は説明のためのものです。

+0

?読む?コンパイラ?私はこれについて少し前にアセンブリのベンチマークを読んだと思いますが、どちらも本質的に同じです(違いは信じられないほど小さい)が、読みやすさの点で私はいつもオブジェクトイニシャライザを使用すると読みやすくなっています。 –

+0

違いを測定できない限り、心配する必要はありません。第2の構文はより明確であるので、一般に好ましい。 – ClickRick

+0

プロパティを新しい値に設定するのに最も速い@JayGould – Kristian

答えて

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 

何のために最速の2番目のコードスニペット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 
+0

Allright。それは私が推測する私の質問に答えた。それは同じスピードです。ありがとうございます – Kristian

+1

答えとして受け入れることは将来の読者に役立つでしょう。 –

+0

私がそうするまで7分。 – Kristian

関連する問題