使用してシステムを。 名前空間ShouldCode { パブリック クラスShouldDelegateVariable { 公共 ボイド(万一) { アクションショー = ショー。 以下のために(int型 i = 0 ; iは< 10 ; iは++ ) { DoShow(ショー)。 } / * IL_0008:NEWOBJインスタンスボイド[mscorlib] System.Action :: CTOR(オブジェクト、ネイティブINT)は IL_000d:stloc.0 IL_000e:ldc.i4.0 IL_000f:stloc.1 IL_0010:br.s IL_0020 //ループ開始(ヘッド:IL_0020) IL_0012:NOP IL_0013:ldarg.0 IL_0014:ldloc.0 IL_0015:無効ShouldCode.ShouldDelegateVariableインスタンスを呼び出す:: DoShow(クラス[mscorlib] System.Action) IL_001a:NOP IL_001b:NOP IL_001c: ldloc.1 IL_001d:ldc.i4.1の IL_001e:追加 IL_001fを:stloc.1 IL_0020:ldloc.1 IL_0021は:10 ldc.i4.s IL_0023を:CLT IL_0025:stloc.2 IL_0026:ldloc.2 IL_0027:brtrue.s IL_0012 //エンドループ* / } 公共 のボイド IL_000e:NEWOBJインスタンスボイド[mscorlib] System.Action。 :.ctor(オブジェクト、ネイティブint型)しない() { ため(int型 i = 0 ; iは< 10 I ++; ) { DoShow(ショー)。 } / * //ループ開始(ヘッド:IL_001e) IL_0005:NOP IL_0006:ldarg.0 IL_0007:ldarg.0 IL_0008:ldftnインスタンス無効ShouldCode.ShouldDelegateVariable ::ショー() IL_0013:ShouldCode.ShouldDelegateVariable無効インスタンスを呼び出す:: DoShow(クラス[mscorlib] System.Action) IL_0018:NOP IL_0019:NOP IL_001a:ldloc.0 IL_001b:ldc.i4.1 IL_001c:追加 IL_001dを:stloc.0の IL_001e:ldloc.0 IL_001fは:10 ldc.i4.s IL_0021を:CLT IL_0023:stloc.1 IL_0024:ldloc.1 IL_0025:brtrue.s IL_0005 //エンドループ* / } パブリック 無効DoShow(アクションアクション) { アクション?.Invoke()。 } 公共 ボイドショー() { Console.WriteLineをは(「!コードは、メモリ割り当ての問題に関連し、実際には、同じであるように見えます」); Console.WriteLineを("解凍変数がないデモのループ範囲NEWOBJで余分なオーバーヘッドに注意し、建設費のデリゲートを減らすことができます!" ); } } }
補足:メモリリソースを割り当てるNEWOBJタイプの命令。通常は新しいです。
ます。https://www.cnblogs.com/zhuwansu/p/11083107.htmlで再現