我正在努力寻找开源分析器,而不是使用我不得不向$$$付费的商业分析器之一。当我在SourceForge上进行搜索时,我遇到了这四个我认为很有希望的C++分析器:
我不确定在学习我的程序的性能方面,哪一个分析器是最好的。很高兴听到一些建议。
发布于 2009-05-13 21:53:20
你可以试试Windows性能工具包。完全免费使用。这个博客条目有一个如何进行基于样本的分析的例子。
发布于 2009-05-13 23:48:55
发布于 2009-05-15 19:42:49
有不止一种方法可以做到。
大多数分析器假设您需要1)高的定时统计精度(大量样本),2)低精度的问题识别(函数&调用图)。
这些优先事项可以逆转。也就是说,问题可以定位到精确的机器地址,而成本精度则是样本数量的函数。
大多数实际问题的成本至少为10%,而高精度并不是必需的。
例句:如果有什么东西使你的程序花费了2倍的时间,那就意味着其中有一些代码花费了50%。如果您在调用堆栈缓慢的时候采集了10个样本,其中大约5个将显示精确的代码行。程序越大,问题就越有可能是一个函数调用。
这是反直觉的,我知道。
注意: xPerf就快到了,但还不完全(据我所知)。它获取调用堆栈的样本并保存它们--这很好。我认为它需要的是:
注意:我刚刚看了卢克·斯塔克沃克,同样的话也适用。我认为这是正确的轨道,但需要用户界面工作。
补充说:仔细查看了LukeStackwalker之后,我担心它会成为度量函数比定位语句更重要这一假设的牺牲品。因此,在每个调用堆栈的样本上,它更新函数级的计时信息,但是它对行号信息所做的只是跟踪每个函数中的最小行号和最大行号,这,它所取的样本越多,它们之间的距离就越远。所以它基本上抛弃了最重要的信息--行号信息。重要的原因是,如果您决定优化一个函数,您需要知道其中哪些行需要工作,并且这些行在堆栈示例中(在被丢弃之前)。
有人可能会反对,如果保留行号信息,就会很快耗尽存储空间。两个答案。( 1)在样品上出现的线条只有那么多,而且反复出现。2)不需要那么多的样本--高统计精度测量的假设总是被假设的,但从来没有被证明是正确的。
我怀疑像xPerf这样的其他堆栈采样器也有类似的问题。
https://stackoverflow.com/questions/860602
复制相似问题