| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 977 人关注过本帖
标题:【周六散分】程序员的烦恼:为性能牺牲代码简洁性值得吗?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
【周六散分】程序员的烦恼:为性能牺牲代码简洁性值得吗?

2015-5-15 23:23:16
来源:csdn
作者:Arne Mertz


本文作者Arne Mertz是一位C++狂热份子,有着丰富的开发经验。文中Arne Mertz针对简洁和性能的关系进行阐述,他认为,开发者不到万不得已时千万不要为了性能而牺牲简洁性,要学会使用工具来解决性能问题。

译文如下:

C++的强项之一是能写出非常高性能的代码。那么在实际中,我们该如何把握好性能处理的尺度呢?

性能≠效率

首先要明确的一点是我们必须把性能和效率区分清楚。这两者分别代表什么?

我们能做得多快(性能);

它需要多长时间去完成(效率)。

这看上去好像差不多,但其实不是。举个例子,假设你需要从A点到B点,效率意味着“最短路径”,性能意味着“以跑代走”。因此,即使以博尔特的速度到达终点,虽然高性能,但并不高效—“没有选择最短路径”。

对于程序来说,循环通常会耗费不少时间。这种情况下,性能意味着“单个循环用时越短越好”,效率意味着“尽量降低循环层数”。

性能并非程序的全部

这是很浅显的道理,但往往容易被忽视,特别是程序员新手。在不少编程论坛里,涉及代码性能优化的提问比比皆是。

有个说法是80%的程序运行时间是由约20%代码决定的,还有的说是90%/10%。因此,对于程序来说,关键运算代码可能仅存在于某小部分代码中。所以,如果把精力放在所有代码的优化上,而不重点主攻关键代码,其实是事倍功半的。

我们真的不懂如何写高性能的代码?

事实上,决定程序运行时长主要的因素是指令数的多少,但这不是由我们控制而是由编译器及其优化器所控制的。

优化器种类繁多,除非是该领域的专家,否则很难明白它对代码做了哪些优化工作。优化器可以销毁临时对象,可以内联函数,可以清除更多其它指令。

所以当这些不确定因素存在时,我们还能写出绝对高性能代码吗?如果真的很在意性能,我建议使用工具来辅助完成。

但也不必太悲观。如果有两种或更多的方法来写出同样可读的代码,那么不妨选择最高性能的写法。例如,在不存储结果的情况下,可以使用++iter来代替iter++。

性能和简单并不总是矛盾

影响程序运行时间的另一个重要因素是内存中数据的布局和结构。

补充一点,假如数据的内存布局不优良,那么会造成要花费很多时间来从获取数据,同时会造成指令冗余。

小结

建议默认编写出可读和简单的代码。如果你真的发现存在性能问题并已经找出其位置,那么仍然有很多选择来对此进行处理而不必为了追求快而写出复杂的代码。不到万不得已不要为了性能而牺牲简洁性,同时要学会使用工具来解决性能问题。

那么问题来了,各位网友,你会为了性能而牺牲代码简洁性吗?
搜索更多相关主题的帖子: 程序员 开发者 csdn 如何 
2015-05-16 13:03
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:2 
实用为主,艺术为辅

剑栈风樯各苦辛,别时冰雪到时春
2015-05-16 13:29
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:2 
可读性和性能应该兼容

一片落叶掉进了回忆的流年。
2015-05-16 13:34
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:2 
性能并非程序的全部
2015-05-16 14:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用tlliqi在2015-5-16 14:23:55的发言:

性能并非程序的全部

这是很浅显的道理,但往往容易被忽视,特别是程序员新手。在不少编程论坛里,涉及代码性能优化的提问比比皆是。

授人以渔,不授人以鱼。
2015-05-16 14:43
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
以下是引用TonyDeng在2015-5-16 14:43:25的发言:

 
这是很浅显的道理,但往往容易被忽视,特别是程序员新手。在不少编程论坛里,涉及代码性能优化的提问比比皆是。
还没考虑过性能 主要是水平还8到那个程度
2015-05-16 14:58
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:2 
性能、简洁,代码是给人看的还是给机器写的?
就像td版你前些时发的一个帖子里说的一句,你写的代码难道要一个团队给你维护?
当时这句话是说给不良习惯编程员的,但是过于简洁的代码(特别是过于高深的算法),往往不是一般人能维护的,同样需要一个团队来维护。
性能与简洁,应该是需要一个平衡吧,反正我遇到算法过于复杂的情况的时候,我往往会抛弃部分性能的考虑,写一些逻辑更清晰的代码。
虽然代码量增加,但在某种程度上来说,却是一种简洁

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-05-16 19:30
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4938
专家分:30047
注 册:2008-10-15
收藏
得分:2 
只会 VB6 ,所以我考虑的第一点是 性能。谁让这个语言的执行效率低下呢。
然后再保证性能的情况下去做简洁、效率。

我发出来的代码,通常情况下可读性都很好,注释量非常大,但都没有高深的算法,主要是不会

授人于鱼,不如授人于渔
早已停用QQ了
2015-05-16 21:31
胡七七
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:304
专家分:851
注 册:2015-5-14
收藏
得分:2 
程序猿。
2015-05-16 21:34
不懂才问
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大草原
等 级:贵宾
威 望:29
帖 子:1503
专家分:6593
注 册:2010-7-5
收藏
得分:2 
值得

鱼和熊掌,其中熊掌是不可得,因为熊是受保护的,就算圈养的,一般人也得不到


所以,一般只能得到鱼

报告老师,我低头不是因为我在装低调,是你问的问题,我真的不会答,,,
2015-05-16 22:01
快速回复:【周六散分】程序员的烦恼:为性能牺牲代码简洁性值得吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016533 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved