你被赋予一堆你最喜欢的编程语言代码,这些代码组合在一起形成了一个相当复杂的应用程序。它运行得相当慢,你的老板要求你进行优化。你会采取哪些步骤来最有效地优化代码?
在优化代码时,你发现哪些策略是不成功的?
重写:你何时决定停止优化并说“如果不完全重写,它就只能运行这么快了”?在什么情况下,您会提倡进行简单的完全重写?您将如何设计它?
在Linux上,我在C和C++中进行了大量数值计算的优化。我发现,虽然分析工具很有用,但它们可能会扭曲你的运行时间结果,使得一些廉价、频繁调用的操作(如c++迭代器增量)看起来比实际情况更耗时。因此,要对这些结果持保留态度。
在实际策略方面,可以采取以下措施来提高速度:
希望这能给您一些启示!
正如其他人已经提到的,分析是你的第一步。
我想补充说,将重点放在数据结构和算法上作为第一步通常比直接深入微观优化更有利可图。
首先,编译器通常会为您执行许多经典的优化技巧(而且通常比您做得更好)。这在更现代的语言(如C#)中尤其如此,因为编译器对程序结构有更多的了解;更糟糕的是,通过“优化”代码来混淆它实际上可能会使编译器难以应用自己更有效的优化。
但大多数情况下,当您开始改进操作的大O时,就有更多的改进空间。例如,搜索链表的时间复杂度是O(n),这意味着搜索所需的时间与其中存储的数据量以相同的速率增加。而搜索哈希表只需要O(1)的时间复杂度,因此您可以添加更多数据而不增加搜索时间(当我们离开理论世界时还有其他因素,因此这并不完全正确,但大多数情况下是正确的)。
调整循环使其从高到低运行,以便生成的代码可以使用JumpIfZero而不是JumpIfLessThan来节省几个时钟周期,这样做可能不会产生同样程度的影响!