另一个方法内部委托定义的开销

本文关键字:定义 开销 方法 内部 另一个 | 更新日期: 2023-09-27 18:37:27

我很想知道在这样的情况下幕后发生了什么:

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将导致在编译时创建一个新的命名方法(您只是不知道该名称是什么)(确切的语义将根据某些细节而有所不同)。

每次调用该方法时完成的唯一工作是创建一个新的委托对象,该对象具有指向同一命名方法的指针。 如果构造一个对象实例对您来说真的太多了(提示:它不是),那么您可以通过从方法中提取委托来保存该工作。