paip.性能跟踪profile原理与架构与本质-- python扫带java php
paip.性能跟踪profile原理与架构与本质-- python扫带java php
##背景
弄个个输入法音标转换atiEnPH工具,老是python性能不的上K,7k记录浏览过k要30分钟了.
##目标
分析一个程序的性能,最终都归结为回答4个基本的问题:
程序运行速度有多快?
运行速度瓶颈在哪儿?
程序使用了多少内存?
内存泄露发生在哪里?
谁引用着泄漏的对象?
作者 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
#工具cProfile,objgraph
谁引用着泄漏的对象? 这个可以使用对象引用图来看见..
该命令的输出应该是一副PNG图像,保存在/tmp/backrefs.png,它看起来是像这样:
back refrences
最下面有红字的盒子是我们感兴趣的对象。我们可以看到,它被符号x引用了一次,被列表y引用了三次。如果是x引起了一个内存泄漏,我们可以使用这个方法,通过跟踪它的所有引用,来检查为什么它没有自动的被释放。
回顾一下,objgraph 使我们可以:
显示占据python程序内存的头N个对象
显示一段时间以后哪些对象被删除活增加了
在我们的脚本中显示某个给定对象的所有引用
#测试代码
import cProfile
#直接把分析结果打印到控制台
cProfile.run("mainx()")
#把分析结果保存到文件中,不过内容可读性差...需要调用pstats模块分析结果
#cProfile.run("foo()", "result")
#还可以直接使用命令行进行操作
#>python -m cProfile myscript.py -o result
def convert2atiEnPn(phntc):#17.3s 49tse
""" æk@sentjueit >> e@k@sen@tju@ei@t
"""
r=""
#print ("o412")
#print(map)
#100test logx abt 3s
#logx(" phntc:---"+phntc)
li= SybalbeList(phntc) #7.6s
#logx(" syblist:---")
#print_li(li)
for sbl in li:
#all saveval invoke time safeVal 5.6s 446tse
#todox gaicheng jude modul ..only 0.1s
#yuln ...python d excepti jon fei resource l a .
myvowel=safeVal (map, sbl.vowel, "")
mycnst=safeVal (map, sbl.csnt , "")
r=r+"@"+mycnst+"-"+myvowel
# phntc=trim(phntc)
return r
#第一的测试
157277 function calls in 20.648 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 20.648 20.648 <string>:1(<module>)
49 0.006 0.000 17.359 0.354 <string>:15(convert2atiEnPn)
49 0.003 0.000 1.105 0.023 <string>:2(updatexo4)
1 0.003 0.003 20.648 20.648 <string>:37(mainx)
#第二次:
118375 function calls in 9.266 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 9.265 9.265 <string>:1(<module>)
49 0.002 0.000 6.395 0.131 <string>:15(convert2atiEnPn)
49 0.003 0.000 1.155 0.024 <string>:2(updatexo4)
1 0.004 0.004 9.265 9.265 <string>:39(mainx)
#分析结果:
能看见,python的异常很消耗性能. 使用 if key in map 代替异常,,,性能消耗从5s直到个0.1s
日志也比较消耗性能
#java跟php的profile
java jprofile,.. php xdebug..
参考
关于Python Profilers性能分析器 - btchenguang - 博客园.htm
Python性能分析指南 - 技术翻译 - 开源中国社区.htm
Python--字典-fussfuss1-ChinaUnix博客.htm
paip.性能跟踪profile原理与架构与本质-- python扫带java php的更多相关文章
- JProfiler 解决 Java 服务器的性能跟踪
作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...
- Zookeeper概论(对zookeeper的概论、原理、架构等的理解)
Zookeeper概论(对zookeeper的概论.原理.架构等的理解) 一.概论 Zookeeper是一个分布式的.开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是h ...
- zabbix监控的基础概念、工作原理及架构(一)
zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...
- LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Atitit.数据库表的物理存储结构原理与架构设计与实践
Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...
- React生命周期和响应式原理(Fiber架构)
注意:只有类组件才有生命周期钩子函数,函数组件没有生命周期钩子函数. 生命周期 装载阶段:constructor() render() componentDidMount() 更新阶段:render( ...
- Atitit paip.对象方法的实现原理与本质.txt
Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...
- paip.关于动画特效原理 html js 框架总结
paip.关于动画特效原理 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对象 ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
随机推荐
- 【POJ2949】Word Rings(最大平均值环)
题意:给定N个字符串,如果A串的最后两个字母跟B串的前两个字母相同它们就能连接. 求一个由字符串组成的首尾相连的环,使(字符串总长度/字符串个数)最大. n<=100000 len<=10 ...
- poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 9472 ...
- flask--虚拟环境
1.安装虚拟环境mosson@mosson:~$ sudo apt-get install virtualenv2.创建一个项目目录mosson@mosson:~$ mkdir myproject3. ...
- eclipse 配置黑色主题
虽然以前也使用eclipse的黑色主题,但是配置起来稍微麻烦一点. 这里先声明,下面的方式适合最新版本的Eclipse Luna,旧的版本可以下载我提供的这个插件,并将其放在eclipse目录下的pl ...
- UILabel的常用属性
UILabel常用属性1——实例化和设置文字 // 实例化UILabel并指定其边框 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake ...
- WPF错误:当前上下文中不存在名称“InitializeComponent”
当修改一个View的名称为VCFCView.xaml的时候,一定要记得在内部x:Class也要修改为XXXX.VCFCView,否则会报错误(图三) 当前上下文中不存在名称"Initiali ...
- 用nodej和glub-watcher写的监听go 项目自动编译,很鸡肋
glub 一般都是很轻量的编译. go太重了,改一小个部分,就编译的话,多数是编译失败. 而且很消耗性能,还没想到完美的优化办法. 暂时用个定时器 监听2秒,停止1秒,如此循环,会减少些 “无效”的编 ...
- 在UITableViewStylePlain情况下sectionHeader可以与tableview一起滑动的解决方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = ; ) { scrollVi ...
- Gossip protocol(zz)
Gossip protocol 这是一系列用于P2P的通信协议.简单来说,就是模拟人类社会中流言传播的方式.每个节点随机地把消息发给它的邻居,接到消息的节点,如果之前没收到这个消息,则会继续随机地转发 ...
- DOM、JDOM、DOM4J的区别(转载)
DOM.JDOM.DOM4J的区别 分类: XML2012-06-11 20:47 5576人阅读 评论(6) 收藏 举报 文档xmlcollectionsjavaapi工作 dom是解析xml的底层 ...