gpt4 book ai didi

F# 中 ||> 和 |||> 管道运算符的性能影响

转载 作者:行者123 更新时间:2023-12-01 09:34:02 24 4
gpt4 key购买 nike

这个问题基本上扩展了this question答案是单参数管道运算符 |> 被编译为与非管道版本相同的 CIL。但是 ||>|||> 呢? MSDN 建议使用真正的元组来包装参数。

但是 ||>|||> 确实分配了一个 .NET 元组来包装参数,然后再次打开它们 只是将它们传递给一个函数,或者编译器是否经过优化以像使用 |> 那样重写 CIL 来处理这些运算符?

更新:

感谢您的回答。这取决于 --optimize+ 参数是否传递给 F# 编译器。

在 Visual Studio 2013 中使用 F# 3.1 构建的默认版本不会创建元组。默认调试构建会创建元组。

最佳答案

编辑:最初我在尝试时实际上混淆了优化和未优化的程序集,并认为它没有优化它;但它确实如此。

我真的试过了。我尝试了以下模块:

module Library1

let f x y = (x, y) ||> (+)

然后用ILSpy反编译。

在没有优化(--optimize-)的情况下编译时,它给出以下内容:

public static int f(int x, int y)
{
Tuple<int, int> tuple = new Tuple<int, int>(x, y);
int item = tuple.Item1;
int item2 = tuple.Item2;
return item + item2;
}

使用优化 (--optimize+) 进行编译时,它给出以下内容:

public static int f(int x, int y)
{
return x + y;
}

所以是的,优化确实删除了元组创建。

关于F# 中 ||> 和 |||> 管道运算符的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22096726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com