在Visual C ++中定时程序运行时

时间:2009-10-22 01:34:47

标签: c++ visual-studio-2008 timing

是否有一种快速简便的方法来计算程序(或整个程序)的一部分,而无需在程序本身内设置计时器类,函数和变量?

我特指的是Visual C ++(Professional 2008)。

谢谢,

-Faken

编辑:这些答案都不符合我的要求,我希望能够在visual c ++中计算一个程序,而不必在其中编写额外的代码。类似于人们在Linux中使用BASH的方式。

6 个答案:

答案 0 :(得分:3)

timeGetTime给出了自打开机器以来经过的毫秒数。通过计算操作之前和之后此函数结果之间的差异,可以得到它所用的毫秒数。不要忘记链接winmm.lib

修改

DWORD msBegin = timeGetTime();
// do your stuff here
DWORD msDuration = timeGetTime() - msBegin;
// at this moment msDuration contains number of milliseconds it took for your stuff to execute

注意事项:

  1. 此计时器的分辨率通常为10毫秒。有一些方法可以改变它,但对于大多数场景来说它足够准确
  2. 如果您有多个处理器,此函数返回的结果在不同的处理器上执行可能会不一致

答案 1 :(得分:3)

Visual Studio有profiler,但您可能需要比Pro更高的SKU才能访问它(例如,Team System Development Edition)。我不确定剖析器是否有实际时间。从链接的文章看,它看起来好像只是做采样,这可以告诉你哪些功能花费的时间最多。

回到VC6时代,有用于分析的命令行工具(PREPPROFILEPREPORT)。那些可以做时间和抽样。建立一个更好的分析器是很好的,但限制它到数千美元的SKU使较小的ISV和业余爱好者不在游戏中。

答案 2 :(得分:2)

在Intel和AMD CPU中有一个高速计数器。 Windows API包括函数调用以读取此计数器的值以及计数器的频率 - 即每秒计数多少次。

以下是如何以微秒为单位计算时间的示例:


#include <iostream>
#include <windows.h>

int main()
{
        __int64 ctr1 = 0, ctr2 = 0, freq = 0;

        // Start timing the code.

        if (QueryPerformanceCounter((LARGE_INTEGER *) &ctr1) != 0) {
                // Do what ever you do, what ever you need to time...
                //
                //
                //

                // Finish timing the code.

                QueryPerformanceCounter((LARGE_INTEGER *) &ctr2);
                QueryPerformanceFrequency((LARGE_INTEGER *) &freq);

                // Print the time spent in microseconds to the console.

                std::cout << ((ctr2 - ctr1) * 1.0 / freq) << std::endl;
        }
}

答案 3 :(得分:2)

superuser.com上的

This answer建议来自Windows 2000 Resource Kit Tool的Timethis.exe(就像Unix系统的 time 一样)。 Example usage

  

...

     

程序与这些程序一起运行   命令:

timethis "perf.exe    tt > NUL"
timethis "perfgcc.exe tt > NUL"
     

时间(文件有100个   行,每行包含250000   整数或多或少随机   分布在1到250000之间)   是:

     
    

VS编译器:

         
        
  • 7.359
  •     
  • 7.359
  •     
  • 7.296
  •     
         

GCC

         
        
  • 1.906
  •     
  • 1.906
  •     
  • 1.937
  •     
  
     

...

所以Visual Studio根本没有参与。

另一个这样的小实用工具是ptime

答案 4 :(得分:2)

如果您想在不更改代码的情况下计算程序的各个部分,那么您需要掌握一个分析器。

Visual Studio Team System(或VS2010中的Premium)有一个分析器,但在Professional中不可用。其他备受推崇的选项是AQTime(有30天试用期)和Redgate's ANTS profiler(有两周试用期)。

您可能还希望查看this question中有关免费选项的建议,建议使用SleepyAMD's CodeAnalyst for Windows

答案 5 :(得分:0)

在 VS19 中,您可以直接开始调试并使用 PerfTips。该行末尾的灰色文本会告诉您自上次休息以来已经过去了多长时间。您可以通过打开诊断工具窗口中的事件标签来更好地了解这一点。