使用私有函数在函数内执行Func的性能

时间:2013-10-11 14:20:09

标签: c# performance delegates func

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

我有一个方法,在其中经常有一个代码块调用,所以我将它重构为一个本地Func

现在因为我没有在其他地方使用那个代码块,所以有了这个而不是另一个方法。

但使用其他方法在性能方面是否更好? Func是否被分配或以其他方式使用额外的处理时间或内存,因为它是在函数内部声明的,或者它是否被编译器缓存甚至实际成为幕后方法?

我知道这听起来像是一个微优化的东西,但在我的情况下,该方法经常被调用。所以也许这会改变这种考虑。

所以,基本上:

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

    //code that calls 'block' several times
}

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

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

2 个答案:

答案 0 :(得分:3)

不,不应该在表现上有很大差异。根据您是否使用闭包,Func要么编译为静态方法,要么编译实例方法。

但是,如果你能内嵌 Func代码,它可以提高性能.. 也许。不知道如何做到这一点。

通过内联,我指的是我们在C ++中可以拥有的inline关键字。它告诉编译器在该代码块中嵌入函数指令。我不确定C#是否能带来这样的好处。

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

答案 1 :(得分:3)

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

在宏伟的计划中,开销确实可以忽略不计。我肯定会在“我不必担心的事情”下提出这个问题。

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