gpt4 book ai didi

arrays - @$aList 和 $aList 之间的 perl6 性能差异

转载 作者:行者123 更新时间:2023-12-01 11:00:36 28 4
gpt4 key购买 nike

我有非常大的数据结构,需要分配和传递。我还需要进入列表。有时,当列表位于标量容器中时,$aList.elems 会显示 1,因为只有一个元素是列表。要进入列表,(@$aList).elems 将给出列表中正确数量的元素。

我的问题是:频繁使用 @$aList 是否存在性能劣势,如果存在性能问题,将分配 @b = @$aList 和使用 @b 代替解决问题?即,从列表上下文切换到数组上下文时会出现减速吗?

谢谢。

最佳答案

$x.elems(@$x).elems 应该返回相同的数字。所以听起来你的代码中有一个你应该修复的错误......可能与 Seq 缓存有关,见下文。

至于性能问题,我没有运行基准测试,但请注意 @$x 只是调用 $x.cache,这...

  • 如果 $x 是一个 List 或子类(包括 Array),只返回对象本身(没有周围的项目容器) ,这应该很快。
  • 如果 $x 是另一种类型的对象,则从中创建一个新的 List 并返回它,这可能会有更多的开销,具体取决于类型。例如。:
    • 字符串 "a" --> 列表 ("a",)
    • 范围 1..10 --> 列表 (1, 2, 3, 4, 5, 6, 7 , 8, 9, 10)
      显然,对于巨大的 Ranges,强制转换为列表会产生显着的内存和 CPU 性能成本。
    • 序列 (1, 2).序列 --> 列表 (1, 2)
      Seq 的情况很特殊,因为它会记住第一次调用 .cache 时创建的 List 对象,并在后续调用中继续返回相同的对象。这就是该方法首先被称为 .cache 的原因。

(注意.list方法也存在,它和.cache做同样的事情,只是它不记住Seq中的List 大小写。)

关于arrays - @$aList 和 $aList 之间的 perl6 性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019666/

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