在Perl脚本中实现更好性能的一些基本经验法则是什么?

OMG*_*uts 1 optimization perl performance

我想知道你是否有任何提高Perl脚本性能性能的基本技巧(比如memoizing determinist functions)?

Cha*_*ens 12

  1. 安装 Devel::NYTProf
  2. 用它运行你的脚本: perl -d:NYTProf some_perl.pl
  3. 将输出文件转换为一个漂亮的报告: nytprofhtml -f nytprof
  4. 在Web浏览器中打开报告: firefox nytprof/index.html
  5. 寻找花费最多时间的东西
  6. 确定这是否是该作业的正确算法(例如,您使用的算法算法也适用吗?)O(n2)O(n)
  7. 将慢速代码提取到可以自行运行的单独脚本中
  8. 写下慢速代码的第二个(或更多)版本
  9. 利用Benchmark它们进行比较(记得用你期望在野外看到的数据,一些算法做伟大的项目数量较少,但可怕的是,当项目的数量增加)
  10. 当你已经证明你有更快的代码,修改原文并返回到第2步,直到你的代码足够快或者你不能再改进它
  11. 如果它仍然太慢,请问如何在这里更快地做X(尽可能详细了解X)


Sin*_*nür 7

你应该先做个人资料.规则被打破.

一些非常基本的提示:

  • 避免啜饮.在某些情况下,不仅仅有一条线路是合理的,但是到处乱窜整个文件都需要付出代价.
  • 避免将大型列表传递给子例程.
  • 如果您有多级哈希或数组,请避免重复解除引用多个级别.在词法变量中存储对最深适用级别的引用并使用它.
  • 在尽可能小的范围内声明您的变量.我不确定这是否是一种优化,但通常会让您看得更清楚,这对提高性能至关重要.


pax*_*blo 6

提高Perl脚本性能的基本技巧包括适用于所有地方的一般方法,以及一些特定于Perl的内容.

像:

  • 测量,不要猜测,只针对昂贵的区域.您的投资回报率会更高.
  • 如果您要稍微使用它们,请缓存不变的昂贵结果.
  • 当有一个能为你做的功能时,不要手动做某事.这是解释和编译速度之间的差异.
  • 使用CPAN,有一个适用于所有内容的模块,通常由比我们凡人更了解Perl的人编写.

这并不容易被简单地提炼成简短的答案.

我会给出一条建议.提高代码性能的最好方法是在SO上发布它的特定位,然后等待brian d foy这样的人找到它:-)