3

我试图搜索这个,但找不到答案。

我有一个方法,里面经常有一个代码块调用,所以我将它重构为一个本地的Func.

现在因为我不在其他任何地方使用该代码块,所以使用它而不是另一种方法是有意义的。

但是,在性能方面,使用另一种方法更好吗?get 分配或以其他方式使用额外的处理时间或内存,因为它Func是在函数内部声明的,还是被编译器缓存或什至实际上在幕后制作成一个方法?

我知道这听起来像是一个微优化的事情,但就我而言,该方法经常被调用。所以也许这会改变考虑。

所以,基本上:

public T CalledVeryOften(...)
{
    Func<...> block = () => ...;

    //code that calls 'block' several times
}

或者

public T CalledVeryOften(...)
{        
    //code that calls 'block()' several times
}

private ... block()
{
   ...
}
4

2 回答 2

3

不,性能上应该没有太大的差异。根据您是否使用闭包,Func 要么编译为静态方法,要么编译为实例方法。

但是,如果您可以内联代码,Func它可以提高性能......也许。不知道该怎么做。

通过内联,我指的是inline我们可以在 C++ 中使用的关键字。它告诉编译器将函数指令嵌入到该代码块中。我不确定 C# 是否提供这种好处。

顺便说一句,如果私有方法确实属于可以重用的方法块并且您Func为了提高性能而使用它,我会将它重构回原来的方式。

于 2013-10-11T14:23:23.277 回答
3

一个微优化 :) 除非您的程序明显减慢到不可接受的水平并且分析确定根本原因是您正在进行函数调用,否则您可以考虑替代方案。

在宏伟的计划中,开销确实可以忽略不计。我肯定会把它归档在“我不需要关心的事情”下。

此外,您可能在此过程中使您的代码更具可读性。

于 2013-10-11T14:24:08.660 回答