急切的管道是否在 F# 中创建多个列表?
Do eager pipes create multiple lists in F#?
使用列表时,管道会创建多个中间主机吗?这对垃圾收集来说不是很糟糕吗?
let mylist = [...]
let filterByPipes ls =
somefilter ls //is a list created here
|> otherFiler // and then again here
|> filtersForDays // and finally returned here
是的,F# 使用应用求值顺序,这意味着每个值都必须经过全面求值才能作为参数传递给函数,这意味着是的,在每一步都会创建一个新列表。
至于是否对垃圾回收不利...“先测量再优化”-优化的第一条规则。
在大多数情况下,数据量是微乎其微的,实际上并没有什么区别,绝对不足以弥补代码可读性的巨大提升。
但是,如果您的测量确实确定了这个特定位置的瓶颈,并且事实证明它对最终目标很重要,那么是的,您将不得不手动融合处理链。或者也许采用更高效的数据结构。这一切都取决于优化目标是什么。
使用列表时,管道会创建多个中间主机吗?这对垃圾收集来说不是很糟糕吗?
let mylist = [...]
let filterByPipes ls =
somefilter ls //is a list created here
|> otherFiler // and then again here
|> filtersForDays // and finally returned here
是的,F# 使用应用求值顺序,这意味着每个值都必须经过全面求值才能作为参数传递给函数,这意味着是的,在每一步都会创建一个新列表。
至于是否对垃圾回收不利...“先测量再优化”-优化的第一条规则。
在大多数情况下,数据量是微乎其微的,实际上并没有什么区别,绝对不足以弥补代码可读性的巨大提升。
但是,如果您的测量确实确定了这个特定位置的瓶颈,并且事实证明它对最终目标很重要,那么是的,您将不得不手动融合处理链。或者也许采用更高效的数据结构。这一切都取决于优化目标是什么。