我知道我可以使用gprof来对我的代码进行基准测试.
但是,我有这个问题 - 我有一个智能指针,具有额外的间接级别(将其视为代理对象).
因此,我有这个额外的层,几乎影响所有功能,并带有缓存的螺丝.
有没有办法测量我的CPU因缓存未命中而浪费的时间?
谢谢!
我今天尝试了linux的perf实用程序,但在解释其结果方面遇到了麻烦.我已经习惯了valgrind的callgrind,这当然是一种完全不同于基于采样的perf方法的方法.
我做了什么:
perf record -g -p $(pidof someapp)
perf report -g -n
Run Code Online (Sandbox Code Playgroud)
现在我看到这样的事情:
+ 16.92% kdevelop libsqlite3.so.0.8.6 [.] 0x3fe57 ? + 10.61% kdevelop libQtGui.so.4.7.3 [.] 0x81e344 ? + 7.09% kdevelop libc-2.14.so [.] 0x85804 ? + 4.96% kdevelop libQtGui.so.4.7.3 [.] 0x265b69 ? + 3.50% kdevelop libQtCore.so.4.7.3 [.] 0x18608d ? + 2.68% kdevelop libc-2.14.so [.] memcpy ? + 1.15% kdevelop [kernel.kallsyms] [k] copy_user_generic_string ? + 0.90% kdevelop libQtGui.so.4.7.3 [.] QTransform::translate(double, double) ? + 0.88% kdevelop libc-2.14.so [.] __libc_malloc ? + …
我在名为bot4CA.py的模块上使用cProfile,因此在控制台中输入:
python -m cProfile -o thing.txt bot4CA.py
Run Code Online (Sandbox Code Playgroud)
模块运行并退出后,它会创建一个名为thing.txt的文件,当我打开它时,那里有一些信息,其余的是一堆乱七八糟的字符,而不是一个整齐有序的数据文件,这就是我想要的.有没有人知道如何使用cProfile并最终得到整齐有序的数据表,比如在命令行中正常使用它,除了在文件中?以下是.txt文件中某些数据的示例:
{( s) build\bdist.win32\egg\colorama\winterm.pyi' t reset_all( i i gpàÂs% ?geOÙHÌœE?{( s- build\bdist.win32\egg\colorama\ansitowin32.pyi¥
Run Code Online (Sandbox Code Playgroud)
我真正想要的是当您调用cProfile.run()时会发生什么,这会导致打印整齐有序的表格,显示所有功能的执行时间,而不是打印,保存在文件中,因为此程序相当大并且运行很多功能.
这似乎是我的壳正在采取的方式太长启动.有什么方法可以对它进行分析,这样我就可以弄清楚是什么让它减慢了这么多?
我正在研究不同的优化技术,我发现这篇文章分析效率代码?有人认为对调用堆栈进行采样比使用分析器更有效.基本思想是,如果您查看调用堆栈,您会看到应用程序最有可能花费大部分时间的位置,然后在那里进行优化.
这当然很有趣,他显然是这方面的专家,但我不知道如何在ruby中查看调用堆栈.在调试器中,我可以说"信息堆栈",但似乎只显示一行.
编辑:我看到Mike Dunlavey的评论:"我只想指出,如果你在调试器下运行,手动中断它,并显示调用堆栈......"
我只是不确定如何手动中断它并调整调用堆栈.
我有一个以下形式的数据框(例如)
shopper_num,is_martian,number_of_items,count_pineapples,birth_country,tranpsortation_method
1,FALSE,0,0,MX,
2,FALSE,1,0,MX,
3,FALSE,0,0,MX,
4,FALSE,22,0,MX,
5,FALSE,0,0,MX,
6,FALSE,0,0,MX,
7,FALSE,5,0,MX,
8,FALSE,0,0,MX,
9,FALSE,4,0,MX,
10,FALSE,2,0,MX,
11,FALSE,0,0,MX,
12,FALSE,13,0,MX,
13,FALSE,0,0,CA,
14,FALSE,0,0,US,
Run Code Online (Sandbox Code Playgroud)
如何使用Pandas计算每列的摘要统计信息(列数据类型是可变的,有些列没有信息
然后返回表单的数据框:
columnname, max, min, median,
is_martian, NA, NA, FALSE
Run Code Online (Sandbox Code Playgroud)
等等
有没有人知道Clojure的一个好的分析工具或库?
我更喜欢可以在REPL中使用的东西,就像(with-profiling ...)Allegro Common Lisp那样.
沿着这些路线还有什么吗?
或者您对使用Clojure的(非商业)Java分析器有任何经验吗?
这个问题已被多次询问.花了一些时间阅读答案后,我做了一些快速分析,试用了前面提到的各种方法......
- 我有一个600 MB的文件,有600 万行字符串(来自DMOZ项目的类别路径).
- 每行的条目都是唯一的.
- 我想加载文件一次并继续搜索数据中的匹配项
我在下面尝试的三种方法列出了加载文件所花费的时间,在任务管理器中搜索负匹配和内存使用的时间
1) set :
(i) data = set(f.read().splitlines())
(ii) result = search_str in data
Run Code Online (Sandbox Code Playgroud)
加载时间〜10s,搜索时间~0.0s,内存使用量~1.2GB
2) list :
(i) data = f.read().splitlines()
(ii) result = search_str in data
Run Code Online (Sandbox Code Playgroud)
加载时间~6s,搜索时间~0.36s,内存使用量~1.2GB
3) mmap :
(i) data = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
(ii) result = data.find(search_str)
Run Code Online (Sandbox Code Playgroud)
加载时间〜0s,搜索时间~5.4s,内存使用量~NA
4) Hash lookup (using code from @alienhard below):
Run Code Online (Sandbox Code Playgroud)
加载时间〜65s,搜索时间~0.0s,内存使用量~250MB
5) File search (using code from @EOL below):
with open('input.txt') …Run Code Online (Sandbox Code Playgroud) 我们有一个MongoDB集群,客户端通过Mongos实例连接到它.群集中的各个mongo都在运行--auth,并且Mongo --keyfile在与它们通信时使用.我们正在分析慢速查询,但没有获取通过Mongo的查询的用户名.
为了更清楚:
如果我直接连接到其中一个Mongo,进行身份验证并运行查询,那么我可以在system.profile之后查看该集合,并且该user字段将填充我的用户名.
如果我通过mongos连接,验证并运行查询,则system.profile集合包含有关查询的分析信息,但用户字段为空.
身份验证是必需的,我无法在没有首先进行身份验证的情况下通过Mongo运行查询,但用户名似乎似乎没有包含在性能分析信息中,我们真的希望能够看到它.
有任何想法吗?我可以对配置进行任何更改吗?