C++编程规范之7:编程中应该知道何时和如何考虑可伸缩性
2013-12-07 21:57
218 查看
摘要:
小心数据的爆炸性增长,不要进行不成熟的优化,但是要密切关注渐进复杂性.用户数据的算法应该能够预测所处理的数据量耗费的时间,最好不差于线性关系.如果能够证明优化必要而且非常重要,尤其在数据量逐渐增长的情况下,那么应该集中注意力改善算法的O(N)复杂性,而不是进行小型的优化。
防范可能的未来,要求我们要避免设计中含有面对更大的文件、更大的数据库、更多像素、更多窗口、更多进程和更多线路上传输的数据时会出现的性能陷阱的现象。
这一问题的解决方案分为两个部分。首先,即使不知道数据量是否会大到成为某个特定计算的问题,默认情况下也应该避免使用不能很好地应付用户数据量的算法,除非这种伸缩性不好的算法有明显的清晰性和可读性方面的好处。在编写程序时,要预先进行如下的处理:
1.使用灵活的、动态分配的数据,不要使用固定大小的数组。
2.了解算法的实际复杂性。
3.优先使用线性算法或者尽可能快的算法。
4.尽可能避免劣于线性复杂性的算法。
5.永远不要使用指数复杂性的算法。
其次,如果有测试数据表明优化非常必要而且重要,尤其是在数据量不断增加的情况下,那么应该集中精力改善O(N)复杂性,而不是把精力华仔节省一个多余假发这样的微观优化上。
总而言之,要尽可能优先使用线性(或者更好的)算法。尽可能合理地避免使用比线性算法差的多项式算法。竭尽全力避免使用指数算法。
小心数据的爆炸性增长,不要进行不成熟的优化,但是要密切关注渐进复杂性.用户数据的算法应该能够预测所处理的数据量耗费的时间,最好不差于线性关系.如果能够证明优化必要而且非常重要,尤其在数据量逐渐增长的情况下,那么应该集中注意力改善算法的O(N)复杂性,而不是进行小型的优化。
防范可能的未来,要求我们要避免设计中含有面对更大的文件、更大的数据库、更多像素、更多窗口、更多进程和更多线路上传输的数据时会出现的性能陷阱的现象。
这一问题的解决方案分为两个部分。首先,即使不知道数据量是否会大到成为某个特定计算的问题,默认情况下也应该避免使用不能很好地应付用户数据量的算法,除非这种伸缩性不好的算法有明显的清晰性和可读性方面的好处。在编写程序时,要预先进行如下的处理:
1.使用灵活的、动态分配的数据,不要使用固定大小的数组。
2.了解算法的实际复杂性。
3.优先使用线性算法或者尽可能快的算法。
4.尽可能避免劣于线性复杂性的算法。
5.永远不要使用指数复杂性的算法。
其次,如果有测试数据表明优化非常必要而且重要,尤其是在数据量不断增加的情况下,那么应该集中精力改善O(N)复杂性,而不是把精力华仔节省一个多余假发这样的微观优化上。
总而言之,要尽可能优先使用线性(或者更好的)算法。尽可能合理地避免使用比线性算法差的多项式算法。竭尽全力避免使用指数算法。
相关文章推荐
- 【Linux Socket 编程入门】03 - 关于IP,Subnet,Port你应该知道的那些事儿
- “老古董”也知道如何编程
- 程序员应该知道的10大编程格言
- 有哪位大虾知道如何编程实现虚拟IP?
- 微服务年度总结,看完这个你应该知道如何回答别人的问题了。
- 21个你应该知道的Ruby编程技巧
- C++编程规范之12:懂得何时和如何进行并发性编程
- 不要只学习编程,更应该学习如何思考
- 找一家好的网站建设公司应该考虑哪些方面,你知道吗?
- 测试设计005:如何更好的知道应该测试些什么?
- 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享(转)
- 用DS播放一个视频时,如何通过编程知道GRAPH加载的FILTER的组件所在的路径??
- 10句编程箴言 每个程序员都应该知道
- 你真的知道一个HTML及资源是如何load的吗(了解各个部分是何时下载和执行的)
- 性能管理 ― 您有规划吗?知道何时优化比知道如何优化更重要
- 让你提前知道软件开发(41):最先到达编程的正确性,其次,考虑效率
- App运行时发生OOM的原因你知道几种?应该如何避免?
- 每一位投资者都应该知道如何确定
- 嵌入式编程中,你应该知道的定点化知识