gpt4 book ai didi

performance - 为什么 Seq.iter 和 Seq.map 这么慢?

转载 作者:行者123 更新时间:2023-12-03 15:10:35 25 4
gpt4 key购买 nike

考虑 F# 中的这段代码:

let n = 10000000
let arr = Array.init n (fun _ -> 0)

let rec buildList n acc i = if i = n then acc else buildList n (0::acc) (i + 1)
let lst = buildList n [] 0

let doNothing _ = ()
let incr x = x + 1

#time

arr |> Array.iter doNothing // this takes 14ms
arr |> Seq.iter doNothing // this takes 74ms

lst |> List.iter doNothing // this takes 19ms
lst |> Seq.iter doNothing // this takes 88ms

arr |> Array.map incr // this takes 33ms
arr |> Seq.map incr |> Seq.toArray // this takes 231ms!

lst |> List.map incr // this takes 753ms
lst |> Seq.map incr |> Seq.toList // this takes 2111ms!!!!

为什么是 itermap Seq 上的功能模块比 Array 慢得多和 List模块等价物?

最佳答案

一旦您调用 Seq您丢失了类型信息 - 移动到列表中的下一个元素需要调用 IEnumerator.MoveNext .比较 Array你只需增加一个索引和 List你可以取消引用一个指针。本质上,您会为列表中的每个元素获得一个额外的函数调用。

转换回 ListArray也因为类似的原因减慢代码

关于performance - 为什么 Seq.iter 和 Seq.map 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874557/

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