|
|
1
155
请记住优化俱乐部的规则:
所以,假设你有工作代码,运行你的程序 Devel::NYTProf . 找出瓶颈。然后回来告诉我们他们是什么。 如果你 不要 有工作代码,先让它工作。你唯一能做的最大的优化就是从不工作到工作。 |
|
|
2
34
安迪已经提到 Devel::NYTProf . 太棒了。真的,真的很棒。使用它。
如果因为某种原因你不能使用
很多糟糕的性能来自不适当的数据结构和算法。一门好的计算机科学课程对这里有很大的帮助。如果你有两种做事方式,并且想比较他们的表现,那么 Benchmark 模块也可以证明是有用的。 以下 Perl Tips 在这里也可能被证明是有用的:
免责声明:我写了一些以上的资源,所以我可能会偏向他们。 |
|
|
3
31
有很多事情你可以改进,所以你首先要弄清楚什么是慢的。其他人已经回答了这个问题。我有点在说这个 Mastering Perl 我也是。 编写新代码时需要考虑的事项的不完整列表:
|
|
|
4
14
不必重写大块,您可以使用 Inline::C 将任何单一的、慢的子程序转换为C。或直接使用XS。也可以用XS增量转换sub。 PPI/PPI::XS 例如,这样做。 但换一种语言总是万不得已。也许你应该找一个专业的Perl程序员来看看你的代码?他很可能会发现一些严重影响你表演的怪癖。除此之外,请分析您的代码。记住,没有银弹。 关于psyco和pyrex:不,Perl没有等价物。 |
|
|
5
9
这只涉及到你的问题的一半-但是为了文档的利益,我会把它贴在这里。 最近的 CentOS/Perl bugfix 我们的应用程序速度提高了两倍多。任何运行CentOS Perl并使用bless/overload函数的人都必须这样做。 |
|
6
9
分析您的应用程序-例如,使用上面提到的分析器。到时候你就会知道时间的走向了 如果把时间花在做CPU使用率以外的事情上,你需要减少那些第一个——CPU很容易扩展,其他的事情则不是。 我发现,有些手术特别慢:
除了万不得已,不要考虑用C重写。从Perl调用C(反之亦然)有相对较大的开销。如果您能得到一个快速的Perl实现,那就更好了。 如果您确实在C中重写了某些内容,请尝试以最小化调用开销和调用perl运行时(例如,SV*函数主要是复制字符串)的方式进行重写。实现这一点的一种方法是,创建一个执行更多操作的C函数,并减少调用它的次数。在内存中复制字符串并不酷。 另一方面,用C语言重写某些内容会带来很大的风险,因为您可能会引入新的故障模式,例如内存泄漏、崩溃、安全问题。 |
|
|
7
9
尼古拉斯·克拉克的演讲是一篇值得一读的关于这个问题的文章 When perl is not quite fast enough (PDF格式)。有些观点有点过时了,比如对Devel::DProf的引用,但是请记住它是在2002年编写的。 然而,所涉及的许多材料仍然是相关的。 |
|
|
8
8
方法和子例程调用在Perl中不是免费的。它们比较贵。所以,如果您的分析结果显示您在小访问器方法中花费了相当大的运行时间,那么这可能是一个值得关注的微观优化。 但是,你应该 不 do正在此处替换get_color()等访问器:
封装中断直接访问:
人们会认为这是不言而喻的,但人们也看到这在各地都做了。这是你能做的,用 Class::XSAccessor
这将创建新的get-and-set_color()方法,这些方法在XS中实现,因此速度大约是手动版本的两倍。变异器(即“$car->color('red')”)和链式方法也可用。 根据您的应用程序,这可能会给您一个非常小的(但本质上是免费的)提升。除非你在做一些特别的事情,否则不要期望超过1-2%。 |
|
|
9
6
使程序运行得更快的最好方法是使程序减少工作。为作业选择正确的算法。我见过很多速度慢的应用程序,因为它们在代码的某个区域选择了一个愚蠢的算法,这个算法被调用了数百万次。当你执行一百万次操作而不是一百万次操作时,你的程序运行速度会慢一百万倍。真的。 例如,下面是我看到的将元素插入排序列表的一些代码:
排序为O(n logn)。插入到排序列表中是O(log n)。 修正算法。 |
|
10
2
最具成本效益的方法可能是,考虑更快的硬件(=>适当的硬件架构)。我说的不是更快的CPU,而是更快的磁盘和更快的网络。。更快的任何东西,真的,那会加速I/O。 多年前,当我们将一个基于XML解析的应用程序(当时的前沿技术<g>)从一个(快速可靠的!)Windows服务器到一个专用的,虽然有些过时,SUN平台与更快的I/O周围。 一如既往,考虑一下
在大多数地方提高(成本!)对手头的问题有效。。。 |
|
|
11
1
如果您的代码需要加速,那么您的测试套件也可能需要加速。本次演讲涉及以下要点: |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |
|
|
A.Ellett · 测试-t STDIN与-t<STDIN> 1 年前 |
|
|
con · 如何跳转到foreach迭代的特定点? 1 年前 |