zoukankan      html  css  js  c++  java
  • 代码性能分析

    代码性能优化

    优化是对代码进行等价变换,使得变换后的代码运行结果与变换前的代码运行结果相同,但执行速度加快或存储开销减少。

    • 代码性能优化是一门复杂的学问。
    • 根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗80% 的工作量。
    • 在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率
    • 以提高程序的全局效率为主,提高局部效率为辅
    • 在优化程序效率时,应先找出限制效率的“瓶颈”
    • 先优化数据结构和算法,再优化执行代码
    • 时间效率和空间效率可能是对立的,应当分析哪一个因素更重要,再做出适当的折衷
    • 从一开始就要考虑程序性能,不要期待在开发结束后再做一些快速调整
    • 正确的代码要比速度快的代码重要,任何优化都不能破坏代码的正确性

    • 认真选择测试数据,使其能够代表实际的使用状况
    • 永远不要在没有执行前后性能评估的情况下尝试对代码进行优化

    性能测试工具

    代码链接

    Profile是Python语言内置的性能分析工具,它能够有效地描述程序运行的性能状况,提供各种统计数据帮助程序员找出程序中的性能瓶颈。

    案例:原因分析

    为什么 keys() 函数的调用复杂度过高?

    keys(): Return a new view of the dic5onary’s keys(docs.python.org)
    
    • 原因:每调用一次keys()函数,系统就会生成一个新的字典迭代器,如果这个生成过程重复50万次,…...
    • 优化:使用 in 操作符直接代替keys(),不再每次生成新的迭代器。

    案例:优化结果

    • 性能优化的关键是如何发现问题,寻找解决问题的方法。
    • 有效的测试是不可缺少的,通过测试找出真正的瓶颈,并分析优化结果
    • 要避免不必要的优化,避免不成熟的优化,不成熟的优化是错误的来源

    Python 代码性能优化

    改进算法,选择合适的数据结构

    • 良好的算法对性能起到关键作用,因此性能改进的首要点是对算法改进
    • 算法时间复杂性的排序依次是
    • 对成员的查找访问等操作,字典(dictionary)要比列表(list)更快
    • 集合(set)的并、交、差的操作比列表(list)的迭代要快

    循环优化的基本原则:尽量减少循环过程中的计算量,在多重循环的时候,尽量将内层的计算提到上一层。

    字符串的优化: Python的字符串对象是不可改变的。字符串连接的使用尽量使用 join() 而不是 +。当对字符串可以使用正则表达式或者内置函数处理时,选择内置函数。

    使用列表解析和生成器表达式:列表解析要比在循环中重新构建一个新的list 更为高效,因此可以利用这一特性来提高运行的效率。

  • 相关阅读:
    记一次擦窗机器人项目的拯救
    基于超声波的四轴定高控制简析
    秋夜
    还能再来过?
    机器人设计之一简单机械设计
    管理之殇
    C++11笔记<一>
    Android开发的菜鸟小记
    程序员客栈与DaoCloud这两家企业联手后,运维工程师要失业了!
    关爱码农成长:关于写代码二三事
  • 原文地址:https://www.cnblogs.com/hanqing/p/5697144.html
Copyright © 2011-2022 走看看