REXX中length()函数的处理开销如何随字符串长度变化?


更新:我在用着:

  • uni-REXX (R) 版本 297t
  • Open-Rexx(TM)版权所有(C)IX Corporation 1989-2002。版权所有。
有帮助吗?

解决方案

开销为0。长度存储在描述符中。

Uni-Rexx的尼尔·米尔斯特(Neil Milsted)作者(无开玩笑)。

其他提示

这完全取决于实施。您是指 REXX for OS/2、REXX for z/VM、REXX for z/OS、OOREXX for Windows、REXX/400 或 Regina?

IBM 的 REXX 语言规范中没有任何内容规定该函数是如何在幕后实现的,如果扫描字符串,则可能是 O(N);如果长度与字符串一起存储在某处,则可能是 O(1)。

如果它是 真的 重要的是,最好使用基准测试代码进行测试,看看长度是否有影响。

我不知道。我曾经写过一些 Rexx,但我从未遇到过 length() 函数的性能问题。这种扩展方式甚至可能取决于您对 Rexx 解析器的实现。

我会编写一个 Rexx 脚本,在 10 个字符的字符串上对“length()”进行 10.000 次调用,然后在 100 个字符的字符串上,然后在 1000 个字符的字符串上进行 10.000 次调用。

在图表中绘制结果时间将为您提供性能下降情况的近似值。

说了这么多,我的猜测是性能下降最多是线性的,如 O(n) 所示。(看 http://en.wikipedia.org/wiki/Big_O_notation)

这是特定于语言实现的。我已经很久没有写 REXX 了,事实上我写了 AREXX(Amiga 实现),那是 15 年前的事了。:-)

您可以编写自己的测试例程。生成长度不断增加的字符串,并使用高性能计时器测量获取 length() 所需的时间。如果您将时间和字符串长度存储在基于逗号分隔表的文本文件中,则可以使用以下命令绘制它 gnuplot. 。然后你会非常清楚地看到它是如何扩展的。

编辑:我应该先检查罗尔夫的答案,因为他或多或少写了同样的东西。:-)

我可以谈论 IBM Mainframe 版本、OS/2 的 Classic Rexx 版本以及任何 Object Rexx 实现。长度存储在字符串描述符中,因此开销与字符串长度无关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top