使用匿名方法有任何开销吗?

Lew*_*ray 8 c# anonymous-methods

我想知道在创建后台工作程序时是否通过使用匿名方法产生任何开销.

例如:

public void SomeMethod()
{
    BackgroundWorker worker = new BackgroundWorker();
    worker.DoWork += (sender, e) =>
    {
        //large amount of code
    }

    worker.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

上面的例子会比//large amount of code在单独的方法中定义更好还是更差?

在线定义后台工作程序方法是否有任何开销,特别是如果SomeMethod()经常调用?

Guf*_*ffa 5

从它们创建委托时,如何处理命名方法和无序方法有一点不同.

匿名方法的委托被缓存,因此检查委托是否已存在于缓存中的开销很小.另一方面,如果您多次运行该方法,它将重用缓存的委托而不是创建新的委托.

命名方法的委托不会被缓存,因此每次都会创建.

除此之外没有区别.anonumous方法将在编译时创建,并且像常规方法一样存在于代码中,只有编译器知道的名称.