[英]Overhead of delegate definition inside of another method
我很好奇地了解在這種情況下幕后發生的事情:
public static void OuterMethod() {
// some random code
var a = 42;
var b = "meaning of life";
Func<string, object> factory = (aString) {
// do something with a and b
return "Hello World";
};
// some more random code
factory("My string");
}
我對經常調用OuterMethod
情況特別感興趣。 在我的情況下,這是MVC請求管道,其中每個請求都調用一次OuterMethod
。
每次調用該方法時,我都必須建立factory
嗎?這會產生很多開銷嗎? 我可以輕松地將Func從OuterMethod
移到其自己的靜態方法中,但是在我的實際情況中,因為它是在內部定義的,所以我可以訪問很多變量,我需要進行計算,否則需要將其包括在簽名中外部定義的方法。 也許這只是微優化,但我想更好地了解編譯器如何處理這類語句。
實際的lambda會導致在編譯時創建一個新的命名方法(您只是不知道該名稱是什么)(確切的語義會根據某些特定內容而有所不同)。
每次調用該方法時要做的唯一工作就是創建一個新的委托對象,該對象具有自己的指向相同命名方法的指針。 如果構造一個對象實例確實對您來說太多了(提示:不是),則可以通過從方法中提取委托來保存該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.