建設コストを削減一見役に立たない4、エキスのデリゲート変数、

使用してシステムを。

名前空間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で再現

おすすめ

転載: blog.csdn.net/weixin_33692284/article/details/94333811
おすすめ