嵌套函数性能(F#)

时间:2016-12-24 11:12:25

标签: f# functional-programming

F#中的嵌套函数是否存在任何性能问题?

如果我有一个在数组中的每个项上调用的函数,并且该函数具有嵌套的内部函数,那么这是否意味着它需要声明,创建和分配所有内部嵌套函数?

看起来非常低效但我真的很喜欢嵌套函数的可读性而不是私有外部函数。

1 个答案:

答案 0 :(得分:18)

嵌套函数由编译器提取到继承自FSharpFunc的类中,嵌套在模块或类型中定义其父函数的位置。因此,编译器基本上为您提供了手动执行的操作,具有外部私人功能。

在运行时发生的所有事情都是这些对象的实例化。与执行内联代码相比,它有一个成本,但我想大大低于你在心智模型中的预期。

它确实为你留下了额外的GC对象。这个对象的实例化会在紧密循环中产生影响吗?在一个简单的实现中,函数对象在每次迭代中重新实例化,也许是。但是F#编译器比这更聪明,并且通常在循环外部实例化循环体中使用的函数。因此,成本可能会尽可能低。

如果有严重疑问,请咨询ILSpy和基准。根据经验,不要担心它,只使用嵌套函数。