函数内函数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()
{
...
}
不,不应该有在性能上的巨大差异。根据是否使用闭包,Func可以编译为静态或实例方法。
但是,如果你能内嵌的Func
代码就可以提高性能.. 也许。不知道如何做到这一点。
通过内联,我指的是我们可以在C++中使用的inline
关键字。它告诉编译器在该代码块中嵌入功能指令。我不确定C#是否提供了这种好处。
顺便说一句,如果私有方法真的属于可重用的方法块,并且为了提高性能而使用Func
,我会重构它的方式。
JIT编译器会自动嵌入小函数(如果可以的话)。 –
雅,编译器知道最好。 –
这是微优化:)除非你的程序是明显减慢到不可接受的程度,并分析确定根本原因是你正在做的函数调用的事实,那么你可以考虑的选择。
在事物的宏伟计划中,开销确实微不足道。我肯定会在“我不需要关心的事情”下面提出这个问题。
此外,您可能已使您的代码在此过程中更具可读性。
它可能有助于包括两个短代码片段,显示您的两个建议场景 – musefan
如有疑问:请剖析它。但是避免[基准测试错误](http://ericlippert.com/tag/benchmarks/) – Corak