1
27
Perl函数调用很慢。这很糟糕,因为正是你想做的事情,把你的代码分解成可维护的函数,会让你的程序慢下来。他们为什么慢?Perl在进入子例程时会做很多事情,这是因为它是非常动态的(即,您可以在运行时处理很多事情)。它必须获得该名称的代码引用,检查它是一个代码REF,设置一个新的词汇暂存器(存储)。
此外,5.10.0版本中的一个bug也会减慢功能的速度。如果您使用的是5.10.0,请升级。 因此,避免在长循环中反复调用函数。尤其是如果它是嵌套的。你能缓存结果吗,也许用 Memoize ? 这项工作必须在圈内完成吗?必须在最内部的循环中完成吗?例如:
对…的呼唤
|
2
14
如果您的sub没有参数,并且是一个常量(如示例中所示),则可以使用 an empty prototype "()" 在分声明中:
然而,对于您的示例,这可能是一个与实际情况不匹配的特殊情况。这只是为了告诉你基准的危险性。 你将通过阅读来学习这个技巧和其他许多技巧 perlsub . 以下是一个基准:
其结果是:
|
3
9
您提出的问题与循环无关。都是你的
函数调用确实涉及不可避免的开销。我不知道Perl相对于其他语言来说,这种开销是否和为什么更贵,但我可以提供一个更好的方法来衡量这类事情:
下面是我在Perl v5.10.0(MSWin32-x86-multi-thread)上得到的信息。非常粗略地说,简单地调用一个什么也不做的函数,其代价与直接运行
一般来说,如果您需要优化一些Perl代码以提高速度,并且您正试图挤出效率的最后一滴水,那么直接编码是一条路要走——但这通常伴随着可维护性和可读性较差的代价。然而,在你开始进行这种微观优化之前,你需要确保你的底层算法是可靠的,并且你对你的代码中那些缓慢的部分的实际位置有一个明确的理解。做错事很容易浪费很多精力。 |
4
2
perl优化器不断地折叠
你可以让它堕落,让它发生:
|
Manny · 如何比较Perl中的字符串? 2 年前 |
BioRod · 我不能用Perl打印键和值 2 年前 |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 2 年前 |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 2 年前 |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 2 年前 |
Pranay Nanda · 使用regex解析许可证文件 6 年前 |