Предварительная сборка в Visual Studio 2010 - PullRequest
0 голосов
/ 11 марта 2012

Возможно ли запустить функцию C # в событии Pre-build и заменить вызов функции на постоянное значение?

Например:

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;
    }
}

1 Ответ

2 голосов
/ 11 марта 2012

Это не имеет ничего общего с "событиями перед сборкой".Это оптимизация, которая может или не может быть применена компилятором во время компиляции.

При нацеливании на .NET Framework вы добавляете дополнительный уровень сложности оптимизации.Многие из возможных оптимизаций выполняются не компилятором C # при первоначальной компиляции кода в IL, а скорее компилятором JIT непосредственно перед выполнением кода (когда IL компилируется в собственный код).

Ида, компилятор JIT наверняка будет применять такие тривиальные оптимизации, как включение вызова функции всякий раз, когда это возможно.Это низко висящий фрукт для любого оптимизатора.(Хотя существуют условия, когда встроенные функции могут сделать вещи медленнее , и оптимизатор, как правило, достаточно умен, чтобы распознать это. Вы должны всегда доверять оптимизатору, а не пытаться заставить его делать то, что Вы думаете, что это имеет смысл. Обычно это умнее вас.)

Ваше внимание должно быть сосредоточено на написании кода, который был бы понятным и простым для чтения / сопровождения.Не беспокойтесь о том, как его оптимизировать, пока вы не профилируете его и не определите, что он слишком медленный.

...