2012-03-11 3 views
0

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

Например:

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

После события Pre-сборки:

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

ответ

2

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

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

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

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