VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话。
Three basic steps
1.    Detect inefficiency
2.    Find a quicker way
3.    Make it a habit
1.检测哪里效率低下
2.找到一种更快的方法
3.养成习惯
 
这3个步骤可谓是大道至简。放之四海而皆准。
不止适用于vim,一样适用于python以及其他语言,也适用于现实生活。
这简单的道理很多人都懂,但是却有很多人没有贯彻。
一遇到性能问题就胡乱猜测,毫无目的,无针对性。
 
性能问题也符合20/80规则。即20%的代码引起了80%的性能损耗。
可能有很多地方可以修修补补来优化,但是却是无关痛痒的性能提升,效果不明显,还经常把代码搞的一团糟。
感觉是不可靠的,要用数据说话。
通过profile可以快速定位到热点。针对热点来进行优化,往往能收到奇效。
 
python自带了profile模块。还自带用c语言写的cProfile。
使用很简单,在命令行中 python -m cProfile xxx.py。
拿《 飘逸的python - 打印螺旋矩阵》中的代码来分析。


其中ncalls是调用次数。
那么tottime 跟cumtime有什么区别呢。
cumtime即cumulative time,累积时间,包含子函数。这里说的子函数,就是在函数中调用其它的函数。
而tottime不包含子函数的时间。
从profile出来的结果可以看出,display_spiral()函数调用了2次,消耗了0.02秒,其它的加起来也就0.001秒,可见print输出很耗性能。
 
几种使用方法:
1.命令行中python -m cProfile xxx.py。
此方法方法只能对整个文件进行profile.
 
2.cProfile.run('statement')
run方法的参数是python语句,比如可以是一条函数调用的语句。
import cProfile
cProfile
.
run
('display_spiral(4,4)
'
)
 
3.enable/disable
此方法可以对某一部分代码进行profle.
import cProfile
p = cProfile.Profile()
p.enable()#开始采集
display_spiral(4,4)
display_spiral(5,4)

p.disable()#结束采集
p.print_stats(sort='tottime')#打印结果


飘逸的python - 性能调优利器profile及其意义的更多相关文章

  1. 数据库实例性能调优利器:Performance Insights

    Performance Insights是什么 阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优.负载监控和关联分析的利器,以简单直 ...

  2. 一目了然 | 数据库实例性能调优利器:Performance Insights

    Performance Insights是什么 阿里云RDS Performance Insights是RDS CloudDBA产品一项专注于用户数据库实例性能调优.负载监控和关联分析的利器,以简单直 ...

  3. 【Java/Android性能优3】Android性能调优工具TraceView使用介绍

    本文转自:http://blog.csdn.net/innost/article/details/9008691 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是 ...

  4. CoreAnimation6-基于定时器的动画和性能调优

    基于定时器的动画 定时帧 动画看起来是用来显示一段连续的运动过程,但实际上当在固定位置上展示像素的时候并不能做到这一点.一般来说这种显示都无法做到连续的移动,能做的仅仅是足够快地展示一系列静态图片,只 ...

  5. iOS-Core-Animation-Advanced-Techniques/12-性能调优/性能调优.md

    性能调优 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...

  6. JavaScript:内存泄露、性能调优

    1.在进行JS内存泄露检查之前,先要了解JS的内存管理: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Manageme ...

  7. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...

  8. websphere性能调优之dump命令

    websphere性能调优之dump命令 基于WebSphere 构建的企业应用,时常会出现性能问题,在严重的情况下还会提示出内存溢出,这是一件很让人恼怒的事情.在WebSphere Applicat ...

  9. iOS-------应用性能调优的25个建议和技巧

    性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...

随机推荐

  1. Android + eclipse +ADT安装完全教程

    最近几天没事做,网上看来看去突然就想弄个android来学学...  首先,是要下载android SDK,在http://developer.android.com/sdk/index.html这个 ...

  2. first day for new job

    第一天上班,做个总结. 总得来说,感觉非常不错,一个结论~保持头脑清醒,好好加油. 今天主要办一些入职手续,拿到了代码,后面几天主要就是熟悉应用的功能.源代码.想好好制定个计划,定日目标. 1.功能结 ...

  3. Android播放音频的两种方式

    一种使用MediaPlayer,使用这种方式通常是播放比较长的音频,如游戏中的背景音乐. 代码如下: private MediaPlayer mPlayer = null; mPlayer = Med ...

  4. OC-字典&数组运用实例:通讯录的实现

    需求实现: 一.定义联系⼈类ContactPerson 实例变量:姓名.性别.电话号码.住址.分组名称. 方法:初始化⽅方法(姓名.电话号码).显⽰示联系⼈信息 二.定义AddressBook类, 封 ...

  5. 再关于IE11

    微软在上周刚刚发布了用于Windows 8.1上的首个Internet Explorer 11的预览版.我们已经确认Internet Explorer 11中的一些新特性,包括对WebGL的支持.预抓 ...

  6. WndPric的使用方法

    protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOS ...

  7. OC基础 可变字典与不可变字典的使用

    OC基础 可变字典与不可变字典的使用 1.不可变字典 1.1创建不可变字典 //创建字典 //注意: //1,元素个数是偶数 //2,每两个元素是一个键值对 //3,值在前,键在后 NSDiction ...

  8. C/C++中的常成员函数

    代码: #include <iostream> using namespace std; class A{ public: void func1(){ cout<<" ...

  9. 练习--分治法--Merge k Sorted Lists

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. / ...

  10. 如何禁止C++默认生成成员函数

    前言: 前几天在一次笔试过程中被问到c++如何设计禁止调用默认构造函数,当时简单的想法是直接将默认构造函数声明为private即可,这样的话对象的确不能直接调用.之后查阅了<Effective ...