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

问题描述 投票:3回答:1

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

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

谢谢。

arrays performance list perl6
1个回答
5
投票

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

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

  • 如果$xList或子类(包括Array),只需返回对象本身(没有周围的项容器),这应该很快。
  • 如果$x是另一种类型的对象,则从中创建一个新的List并返回该值,这可能会有更多的开销,具体取决于类型。例如。: String "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案例中的List。)

© www.soinside.com 2019 - 2024. All rights reserved.