0

ビルド前のイベントで C# 関数を実行し、関数呼び出しを定数値に置き換える可能性はありますか?

例えば:

class A{
    A(){
        var aVar = B.Func1("a");
    }
}
class B{
    static String Func1(String str){
        //Do some things
        return str;
    }
}

ビルド前イベントの後:

class A{
    A(){
        var aVar = "A";
    }
}
class B{
    public static String Func1(String str){
        //Do some things
        return str;
    }
}
4

1 に答える 1

2

これは「ビルド前のイベント」とは関係ありません。これは、コンパイル中にコンパイラによって適用される場合と適用されない場合がある最適化です。

.NET Framework を対象とする場合は、最適化の複雑さのレイヤーを追加します。考えられる最適化の多くは、最初にコードを IL にコンパイルするときに C# コンパイラによって実行されるのではなく、コードが実行される直前 (IL がネイティブ コードにコンパイルされるとき) に JIT コンパイラによって実行されます。

そして、はい、JIT コンパイラーは、可能な限り、関数呼び出しをインライン化するなどの簡単な最適化を確実に適用します。これは、どのオプティマイザーにとっても容易に達成できる成果です。(ただし、関数をインライン化すると処理が遅くなる状況があり、オプティマイザは一般にこれを認識するのに十分なほど賢いです。オプティマイザを常に信頼する必要があります。自分が理にかなっていると思うこと強制しようとするのではなく、オプティマイザを常に信頼する必要があります。あなた。)

明確で読みやすく保守しやすいコードを書くことに重点を置く必要があります。プロファイリングして遅すぎると判断するまでは、最適化の方法について心配する必要はありません。

于 2012-03-11T05:58:09.180 に答える