与C#相比,有没有人知道F#在性能方面的衡量标准.我有一个带有大量矢量操作,光线碰撞算法等的C#光线跟踪器,并认为它们可能更容易用F#表示.我不是要问F#在表达数学问题上有多好,这里已经回答了这个问题,而是我应该期待更好或更差的表现?由于光线跟踪是非常高性能的,即使是性能不佳的小案例也可能是错误的地方.
编辑:
似乎已经有很多关于这个问题的问题我找不到了(如果你真的用"F#"这个词搜索任何东西都没有结果).这里有一个好处是以下答案:
F#提供了一些可以带来改变的与性能相关的功能.
首先,.NET上委托的实现目前效率很低,因此,F#使用自己的FastFunc类型来实现高性能的一流功能.
其次,F#使用.NET元数据来传递内联函数,以便可以跨API导出它们,当然,这可以在某些情况下显着提高性能.
最后,模式匹配在C#中表达非常费力,因为语言缺少模式匹配,但几乎不可能保持优化的C#代码等同于许多非平凡模式匹配.相反,F#编译器在编译期间积极优化模式匹配.
相反,C#编译器更擅长使用IEnumerables优化循环,并且更好地优化值类型的计算(例如复杂算术).
干杯,Jon Harrop.
Rinat Abdull.. 7
是的,F#表现更好.
以下是在不同语言中实现的单线程算法的一些性能结果(基准激活函数方法用于神经网络):
C#:
10^7 iterations using Sigmoid1() took 3899,1979 ms 10^7 iterations using Sigmoid2() took 411,4441 ms
纯C:
10^7 iterations using sigmoid1: 628 ms 10^7 iterations using sigmoid2: 157 ms
F#:
10^7 iterations using sigmoid1: 588.843700 ms 10^7 iterations using sigmoid2: 156.626700 ms
更多细节
是的,F#表现更好.
以下是在不同语言中实现的单线程算法的一些性能结果(基准激活函数方法用于神经网络):
C#:
10^7 iterations using Sigmoid1() took 3899,1979 ms 10^7 iterations using Sigmoid2() took 411,4441 ms
纯C:
10^7 iterations using sigmoid1: 628 ms 10^7 iterations using sigmoid2: 157 ms
F#:
10^7 iterations using sigmoid1: 588.843700 ms 10^7 iterations using sigmoid2: 156.626700 ms
更多细节