这是一个危险的问题,所以让我试着正确地说出来。过早优化是所有邪恶的根源,但如果你知道你需要它,那么应该考虑一套基本的规则。这套是我想知道的。
例如,想象一下你有几千件物品的清单。如何查找具有特定ID的项目?当然,您只需使用Dictionary将ID映射到项目。
如果您知道存储在数据库中的设置始终是必需的,您只需缓存它而不是每秒发送数百次数据库请求。
甚至可以像在prod中使用版本而不是调试版本一样简单。
我想还有一些更基本的想法。
我特别不正在寻找“不要这样做,对于专家:不要这样做”或“使用探查器”答案,但对于非常简单的一般提示。如果你认为这是一个有争议的问题,你可能会误解我的意图。
我也不是在寻找任何项目的具体建议,也不是任何复杂的低级技巧。可以把它想象成如何避免作为初学者所犯的最重要的性能错误。
编辑:这可能是我正在寻找的一个很好的描述:为具有基本技术理解的人创建一个通用优化规则的演示文稿(不是实际示例)(假设他们说获得了CS学位)但由于某种原因从未写过一行代码。指出最重要的方面。伪代码很好。不要假设特定语言甚至架构。
答案 0 :(得分:5)
两条规则:
使用正确的数据结构。
使用正确的算法。
我认为这涵盖了它。
答案 1 :(得分:3)
这比你的程序可能做的任何其他事情要慢几个数量级,所以避免它们确实非常重要。实现这一目标的典型方法是:
例如,B-Trees在数据库系统中绝对无处不在,因为它减少了磁盘索引查找的高清访问粒度。
答案 2 :(得分:1)
我认为非常重要的一点就是要经常执行所有代码。这通常是关键内循环中的代码。
规则1:了解此代码
对于此代码,请避免所有开销。运行时的微小差异会对整体性能产生重大影响。例如。如果你实现一个图像过滤器,每个像素0.001ms的差异将在尺寸为1000x1000(不大)的图像上的过滤器运行时间中产生1s的差异。
内循环中要避免/做的事情是:
第二个一般建议:每个层/接口成本,尽量避免大量不同的技术,系统将花费更多的时间进行数据转换然后在做实际的工作,保持简单。
正如其他人所说,使用正确的算法,在优化算法实现之前,首先尝试优化算法复杂度。
答案 3 :(得分:1)
我知道你正在寻找特定的编码提示,但很容易找到:缓存,循环展开,代码提升,数据和放大器。代码区域,等等,等等...
最大的暗示是不要使用它们。
如果我说“这是全能的力量不要让你知道的秘密!!”,这有助于说明这一点吗?选择你的权力:微软,谷歌,太阳等等。
不要使用它们
直到你知道,确定无疑,问题是什么,然后编码提示是显而易见的。
答案 4 :(得分:0)
你的算法是否适合这种情况还是有更好的算法?