簡體   English   中英

另一個方法內部的委托定義的開銷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM