代码性能分析

代码性能优化

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

  • 代码性能优化是一门复杂的学问。
  • 根据 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 更为高效,因此可以利用这一特性来提高运行的效率。

时间: 2024-10-26 03:39:29

代码性能分析的相关文章

Visual Studio代码性能分析工具

AMD CodeXL 2011年发布的AMD CodeAnalyst Performance Analyzer 现在已经被AMD CodeXL所替代.AMD CodeXL的主要目的是帮助开发者更好利用CPU, GPU和APU的计算性能,具有强大的GPU调试.CPU和GPU代码分析.及静态的OpenCL内核性能分析等能力. AMD提供了支持Windows 7.Windows 8和Linux系统的单机版CodeXL分析工具.在Visual Studio 2010,2012和2013上也有AMD Co

11个Visual Studio代码性能分析工具

软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和性能测试,从而大大简化程序员进行代码性能优化的过程.MSDN杂志2011年7月份曾发布主题为“.NET代码分析工具和技术”的那一期,让广大程序员收获颇丰.四年过去之后,这些工具又进一步做出了很多改进,同时也出现了更多的选择.本文对当前主流的一些Visual Studio代码性能分析工具进行简单的梳理

11 个 Visual Studio 代码性能分析工具

软件开发中的性能优化对程序猿来说是一个很重要的问题. 一个小问题可能成为一个大的系统的瓶颈. 可是对于程序猿来说.通过自身去优化代码是十分困难的.幸运的是.有一些很棒的工具能够帮助程序猿进行代码分析和性能測试,从而大大简化程序猿进行代码性能优化的过程.MSDN 杂志 2011 年 7 月份曾公布主题为".NET 代码分析工具和技术"的那一期.让广大程序猿收获颇丰.四年过去之后,这些工具又进一步做出了非常多改进,同一时候也出现了很多其它的选择.很多其它应用代码安全工具请点击:http:/

使用 profile 进行python代码性能分析

定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等.其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈.Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot. profile 的使用

php代码性能分析方法

1.用到的函数 microtime() ,函数返回当前 Unix 时间戳和微秒数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分.字符串的两部分都是以秒为单位返回的 memory_get_usage() ,函数返回内存使用量,还可以有个参数,$real_usage,其值为布尔值.如果设置为 TRUE,获取系统分配的真实内存尺寸.如果未设置或者设置为 F

Python 性能分析大全

虽然运行速度慢是 Python 与生俱来的特点,大多数时候我们用 Python 就意味着放弃对性能的追求.但是,就算是用纯 Python 完成同一个任务,老手写出来的代码可能会比菜鸟写的代码块几倍,甚至是几十倍(这里不考虑算法的因素,只考虑语言方面的因素).很多时候,我们将自己的代码运行缓慢地原因归结于python本来就很慢,从而心安理得地放弃深入探究. 但是,事实真的是这样吗?面对python代码,你有分析下面这些问题吗: 程序运行的速度如何?         程序运行时间的瓶颈在哪里?   

通过VS2010性能分析来查找代码中那些地方最损耗资源

在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好.很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题.VS2010提供了性能分析工具就能轻松地帮我们解决这一事情. 假设现在写了一个组件,很想知道组件和代码的性能情况.这个可以简单地写一个测试程序. 测试程序写好后可以通过VS2010分析菜单里选择启用性能向导 选择CPU采样后就选择需要分析的项目 测试项目选择完成后就可以运行分析,结束分析后VS2010会提供个详细报告

[Swift通天遁地]七、数据与安全-(15)使用单元测试进行代码的性能分析

单元测试提供了一个测试性能的方法,可以用来对应用程序的执行性能进行检测. 本文将演示使用单元测试进行代码的性能分析: 两种不同的图片加载方式的性能差异,在[Assets.xcassets]中导入图片素材. 如果项目中没有引用单元格测试框架, 项目导航区点击选中项目名称,再点击中间列的[+]图标进行添加. 在弹出的模板窗口中,选择单元测试框架模板[iOS Unit Testing Bundle] ->[Next]->保持默认的选项设置->[Finish] 打开单元测试用例文件[UnitTe

mysql索引结构原理、性能分析与优化

原文  http://wulijun.github.com/2012/08/21/mysql-index-implementation-and-optimization.html 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页查阅找出需要的资料. 唯一索引(unique index) 强调唯一,就是索引值必须唯一. 创建索引: create unique index 索引名 on 表名(列