性能反模式

Xia*_*ian 13 performance anti-patterns

我目前的工作谁是客户吓呆了改变,因为"业绩原因"烂未检验的和未维护的代码.很明显,存在许多错误观念,而且理由不被理解,而只是盲目信仰.

我遇到的一个这样的反模式是需要标记尽可能多的类作为密封的内部 ...

*重新编辑:我认为将所有内容标记为内部密封(在C#中)作为过早优化.*

我想知道人们可能意识到或遇到的其他一些性能反模式是什么?

Seb*_*etz 70

我遇到的最大性能反模式是:

  • 不测量更改前后的性能.

收集性能数据将显示某种技术是否成功.不这样做会导致相当无用的活动,因为当没有任何改变时,某人会有"感觉"提高性能.


dsi*_*cha 29

房间里的大象: 专注于实现级微优化,而不是更好的算法.

  • ......或更好的建筑. (3认同)

Kev*_*Kev 17

可重复使用.

我曾经一直这样做,认为我在声明上节省了几个周期并减少了内存占用.与调试代码的方式相比,这些节省的成本微不足道,特别是如果我最终移动代码块并且关于起始值的假设发生了变化.

  • 任何值得盐的编译器都会使用相同的内存位置或注册这两个变量,就像你重复使用它一样(因为它们的生命周期显然不会重叠). (2认同)

PEZ*_*PEZ 8

想到过早的性能优化.我倾向于不惜一切代价避免性能优化,当我决定我确实需要它们时,我将问题传递给我的同事几轮,试图确保我们把obfu ... eh优化放在正确的位置.


Rob*_*b K 6

我遇到过的一个问题就是将硬件投入到严重损坏的代码中,试图使其足够快,这与Jeff Atwood在Rulas评论中提到的文章相反.我不是在谈论通过在更快的硬件上运行使用基本的,正确的算法加速使用优化算法的加速.我正在谈论当O(n log n)算法在标准库中时,使用不明显正确的自制O(n ^ 3)算法.还有手工编码例程之类的东西,因为程序员不知道标准库中有什么.那个人很沮丧.


Flo*_*her 6

使用设计模式只是为了使用它们.


Las*_*lan 6

  1. 使用#defines而不是函数来避免函数调用的惩罚.我已经看到了代码,其中扩展的定义结果是生成巨大且非常慢的代码.当然也不可能调试.内联函数是实现此目的的方法,但也应谨慎使用它们.

  2. 我已经看到了一些代码,其中独立测试已经转换为可以在switch语句中使用的单词中的位.切换可以非常快,但是当人们将一系列独立测试转换为位掩码并开始编写256个优化特殊情况时,他们最好有一个非常好的基准测试证明这可以带来性能提升.从维护的角度来看,这真的是一种痛苦,独立处理不同的测试会使代码更小,这对性能也很重要.