2012-03-11 112 views
0

是否有可能在預生成事件中運行C#函數並將函數調用替換爲常量值?在Visual Studio 2010中預生成

例如:

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

回答

2

這有什麼好做 「預建事件」。這是編譯期間編譯器可能應用或可能不會應用的優化。

定位.NET Framework時,會增加一個額外的優化複雜度層。當您最初將代碼編譯爲IL時,C#編譯器不會執行許多可能的優化,而是在代碼執行之前(當IL被編譯爲本機代碼時)由JIT編譯器執行。

是的,JIT編譯器肯定會應用如此簡單的優化,以儘可能內聯函數調用。對於任何優化器來說,這都是一個低下的成果。 (雖然內聯函數可以讓事情變得更慢,並且優化器通常足夠聰明以識別這種情況,但您應該始終相信優化器,而不是試圖強制它執行您認爲有意義的東西。它通常比你聰明。)

你的焦點應該是編寫清晰易讀的代碼。不要擔心如何優化它,直到您對它進行了配置並確定其速度太慢。

相關問題