函数内函数vs使用私有函数的性能

函数内函数vs使用私有函数的性能

问题描述:

我试图搜索这个,但无法完全找到答案。函数内函数vs使用私有函数的性能

我有一个方法,里面有一个代码块调用很频繁,所以我把它重构成一个本地的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

它可能有助于包括两个短代码片段,显示您的两个建议场景 – musefan

+1

如有疑问:请剖析它。但是避免[基准测试错误](http://ericlippert.com/tag/benchmarks/) – Corak

不,不应该有在性能上的巨大差异。根据是否使用闭包,Func可以编译为静态或实例方法。

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

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

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

+0

JIT编译器会自动嵌入小函数(如果可以的话)。 –

+0

雅,编译器知道最好。 –

微优化:)除非你的程序是明显减慢到不可接受的程度,并分析确定根本原因是你正在做的函数调用的事实,那么你可以考虑的选择。

在事物的宏伟计划中,开销确实微不足道。我肯定会在“我不需要关心的事情”下面提出这个问题。

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