是否有任何Java分析器允许分析短期应用程序?到目前为止,我发现的分析器似乎适用于在用户终止之前一直运行的应用程序.但是,我想要分析像命令行实用程序一样工作的应用程序,它会立即运行和退出.像visualvm或NetBeans Profiler这样的工具甚至无法识别应用程序是否已运行.
我正在寻找类似于Python的cProfile的东西,因为当应用程序退出时会返回探查器结果.
我不懂gprof的文档,关于如何使用gprof编译程序以进行性能分析.在g ++中,是否需要使用-g选项(调试信息)进行编译,-pg或者不添加选项.在每种情况下,我得到不同的结果,我想看看我的应用程序中的瓶颈在哪里处于发布模式,而不是在调试模式中,编译器遗漏了许多优化(例如内联)
在SO上,有很多关于性能分析的问题,但我似乎没有找到整体情况.涉及到相当多的问题,大多数问答都会忽略所有问题,但不能忽视其中的一些问题.
我想知道什么.如果我有两个功能做同样的事情,我很好奇速度的差异,没有外部工具,定时器测试这个是否有意义,或者在测试中编译会影响结果吗?
我问这个是因为如果它是明智的,作为一个C++程序员,我想知道它应该如何做到最好,因为它们比使用外部工具简单得多.如果它有意义,让我们继续讨论所有可能的陷阱:
考虑这个例子.以下代码显示了执行相同操作的两种方法:
#include <algorithm>
#include <ctime>
#include <iostream>
typedef unsigned char byte;
inline
void
swapBytes( void* in, size_t n )
{
for( size_t lo=0, hi=n-1; hi>lo; ++lo, --hi )
in[lo] ^= in[hi]
, in[hi] ^= in[lo]
, in[lo] ^= in[hi] ;
}
int
main()
{
byte arr[9] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
const int iterations = 100000000;
clock_t begin = clock();
for( int i=iterations; i!=0; --i )
swapBytes( arr, 8 );
clock_t …Run Code Online (Sandbox Code Playgroud) 典型分析器的输出是代码中的函数列表,按程序运行时每个函数所用的时间量排序.
这是非常好的,但有时我对程序在大多数时间做的事情感兴趣,而不是EIP大部分时间.
我的假设分析器的示例输出是:
Waiting for file IO - 19% of execution time.
Waiting for network - 4% of execution time
Cache misses - 70% of execution time.
Actual computation - 7% of execution time.
Run Code Online (Sandbox Code Playgroud)
有这样的探查器吗?是否有可能从"标准"分析器中获得这样的输出?
我正在使用Linux,但我很高兴听到其他系统的任何解决方案.
我需要一个适用于Windows和Linux的良好的分析器(它们不必是相同的;对每个操作系统的单独建议都很好)可以附加到一个已经运行的进程,该进程没有以任何"特殊"方式编译并给出我什么功能的过程中花费了大量的时间,我有一些长期运行的科学代码,我想在那里的花费大部分时间在执行的各个阶段的快照,统计,并能够获得满意的结果,而不必须运行整个程序开始完成.
我正在使用的编译器(Digital Mars D)带有一个仪器分析器.这对我正在运营的工作来说太慢了.由于我只对识别主要瓶颈感兴趣,因此我想要快速且易于使用的东西,即使它只是大致准确.理想情况下,它还应该能够同时分析所有线程并给我一个汇总报告.
在Linux上,我一直在使用GDB作为穷人的采样分析器(暂停我的应用程序几次并查看它的功能).基本上,我正在寻找一个更自动化的版本.
最后一个要求:在Linux上,它必须易于安装而没有root权限,因为我将在我没有root权限的服务器上运行它.
编辑:虽然代码是用D编写的,D的编译模型等与C类似,但为C编写的工具应该可以正常工作.
我试图在InterviewStreet上解决问题.一段时间后,我确定我实际上花了大量时间阅读输入.这个特殊的问题有很多输入,所以这有点意义.没有意义的是为什么不同的输入方法具有如此不同的表现:
最初我有:
std::string command;
std::cin >> command;
Run Code Online (Sandbox Code Playgroud)
更换它使它明显更快:
char command[5];
cin.ignore();
cin.read(command, 5);
Run Code Online (Sandbox Code Playgroud)
重写使用scanf的所有内容使其更快
char command;
scanf("get_%c", &command);
Run Code Online (Sandbox Code Playgroud)
总而言之,我把读取输入的时间减少了大约1/3.
我想知道这些不同方法之间的性能存在这样的差异.另外,我想知道为什么使用gprof没有强调我在I/O上花费的时间,而是似乎指责我的算法.
我有一个.NET应用程序,它快速运行大约2000条记录,开始变得非常慢.我试图找到瓶颈,我想知道是否有一个好的,可能是免费的,但它不一定是,工具或找到瓶颈的方法.我正在尝试找到一个未清除的列表,但我还没有看到它.我有VS 2008.
我有一个由多个python脚本组成的应用程序.其中一些脚本正在调用C代码.应用程序现在运行速度比现在慢得多,因此我想对其进行分析以查看问题所在.是否有工具,软件包或只是一种方式来分析这样的应用程序?一个工具,它将遵循python代码到C代码并配置这些调用?
注1:我很清楚标准的Python分析工具.我特意在这里寻找组合的Python/C分析.
注2:Python模块使用ctypes调用C代码(有关详细信息,请参阅http://docs.python.org/library/ctypes.html).
谢谢!
这可能看起来像一个愚蠢的问题,但在询问了有关stackoverflow的一些问题并查看其他人的问题之后,通常有一件事情就是使用分析器来查看代码的哪一部分运行缓慢,等等.
作为一个编程初学者,我是所有这一切的新手,但由于我正在创建更大更大的项目,我觉得这样的工具有时会被证明是非常有用的.唯一的问题是,我不知道如何使用它们.
通常,我使用JDeveloper在Java中编码,我在互联网上读到有一个内置的.我尝试使用它,但我想我真的不知道如何,因为我找不到哪些部分让我的程序变慢.我不知道这是否是因为我不知道如何使用它,或者如果它是已知的不是很好,所以我想我会问这里看到哪一个我应该开始.
我也安装了Eclipse并且知道如何使用它(当我编写一些Python时或者当我尝试Android开发的教程时使用Eclipse),所以如果有一个免费的分析器,我可以用于这两个中的任何一个IDE,我真的很想知道它.另外,关于剖析器我需要了解的教程或基本内容对我有很大帮助.
在此先感谢并抱歉,我的问题并不是关于编程,但这似乎是获取有关分析器的有价值信息的最佳位置.
我在mac上编写仅限STL的C++应用程序(OS X Lion/XCode 4.1).我需要回答一个简单的问题:必须优化哪些代码部分?Gprof空出输出,XCode的仪器没有帮助.我需要使用哪种工具?