0

我想计算小表达式的性能,以决定使用什么。考虑下面的代码。可能会发生几次对它的递归调用。

  void foo(void) {
    i++;
    if(etc(ch)) {
    //..
    }
    else if(ch == TOKX) {
        p=1;
        baa();
        c=0;
        p=0;
    }
     //more ifs
}

问题:

递归调用可能会发生foo(),并且只有在具有非零值i时才应该递增(这意味着它将在代码的其他部分中使用)我应该放一个还是只留下?pif(p) i++;i++;

是回答(我自己)这样的问题,我正在寻找一些工具。有人可以相信这是“浪费时间”或说“优化是万恶之源”..但对于这样的情况,我不相信它适用于我的情况。恕我直言。如果您不这么认为,请告诉我们您的意见。

一个“理想”的工具,可以显示每个表达式运行的时间。

这让我想到 IBM、Microsoft、Sun 等最大软件公司的软件调试如何。也许这是另一个线程的主题.. 我认为这里更有用。

平台:应该是 Linux 和 MS-Windows。

4

2 回答 2

2

古老的格言是“在你确定、绝对肯定、你需要”之前不要优化……这是有原因的。

也就是说,这里有一些想法:

  • 如果可以的话,避免递归

  • 在宏观层面上,类似 linux 中的“时间”命令可以告诉您应用程序运行了多长时间。将该方法放入一个运行 10k 次的循环中并对其进行测量,以平均数字

  • 如果您想测量在单个功能上花费的时间,那么您想要的就是分析。Visual Studio 在 Windows 中有一些很好的内置功能,但是有很多很多的选择。

http://en.wikipedia.org/wiki/List_of_performance_analysis_tools

于 2013-05-04T18:12:26.650 回答
1

首先请了解哪些测量很重要:程序花费的总挂钟时间,以及每个语句处于活动状态的时间百分比,其中“活动”表示“在堆栈上”。

  • 通过从之前的系统时间减去之后的系统时间,可以轻松测量总挂钟时间。如果它很短,只需将代码循环 1000 次,或者其他什么。您不需要很多位数的精度。

  • 每个语句处于活动状态的时间百分比最好通过在挂钟时间(而不是CPU 时间)获取的堆栈样本来衡量。任何基于挂钟堆栈采样的好的分析器都可以工作,例如ZoomOprofile。重要的不仅是取样,还有提供给您的样品。最好它告诉您“包含代码行的百分比”,这只是包含代码行的堆栈样本的百分比。同样,您不需要很多位数的精度,这意味着您不需要大量的样本。

与其他度量(如自身时间、函数度量、调用计数、毫秒等)相比,包含代码行百分比很重要的原因是它代表了该行负责的总挂钟时间的一部分,如果它不存在就不会被花费。如果你能摆脱它,那就告诉你它会节省多少时间。

于 2013-05-05T02:00:21.550 回答