2010-10-04 20 views
3

我重寫了一個使用反射的方法,該方法使用System.Linq.Expressions類和Expression.Compile()方法的新代碼。爲什麼用表達式<TDelegate> .Compile()比純C#慢?

正如所料,該程序使用反射速度要快得多。

我還重寫了純C#中的相同方法進行比較,並且C#中的代碼比使用Expression.Compile()編譯的代碼快4倍。在我的情況下,這個方法被循環調用了幾千次。

請注意,我從我的配置文件中取出了第一個調用,以確保我沒有測量編譯的時間。所以我編譯表達式,然後調用它一千次。

爲什麼使用Expression.Compile()編譯的代碼比純C#慢?

回答

3

已經注意到您必須緩存並重新使用委託,理想情況下忽略第一次運行。爲了給出完整的答案,我們需要看一個具體的例子。我實際上看到了更快的(由於設置了不同的IL標誌)。

所以:這取決於代碼。我的猜測是,你的例子做了一些轉換或運算符,以便c#編譯器處理不同(優化),但Expression必須以通用方式處理(因爲它與語言無關)。

另一個因素是如何處理文字和抓圖。

相關問題