perl6 @ $ aList和$ aList

时间:2017-12-29 08:27:18

标签: arrays performance list perl6

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

我的问题是:频繁使用@$aList是否存在性能劣势,如果存在性能问题,是否会分配@b = @$aList并使用@b来解决问题?即,从列表切换到数组上下文会有加速吗?

感谢。

1 个答案:

答案 0 :(得分:5)

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

至于性能问题,我没有运行基准,但请注意@$x只是调用$x.cache,其中...... {/ p>

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

(请注意,.list方法也存在,它与.cache的功能相同,只是它不记得Seq案例中的列表。)