2

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

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

谢谢,

- 伪造

编辑:这些答案都没有满足我的要求,我希望能够在 Visual c++ 中为程序计时,而不必在其中编写额外的代码。类似于人们在 Linux 中使用 BASH 的方式。

4

6 回答 6

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. 如果你有多个处理器,这个函数返回的结果,在不同的处理器上执行可能会不一致
于 2009-10-22T01:42:38.023 回答
3

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

早在 VC6 时代,就有用于分析的命令行工具(PREPPROFILEPREPORT)。那些可以进行计时和采样。构建一个更好的分析器固然很好,但将其限制在数千美元的 SKU 会使较小的 ISV 和业余爱好者无法参与其中。

于 2009-10-29T16:19:27.573 回答
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;
        }
}

于 2009-10-29T13:34:51.463 回答
2

superuser.com 上的这个答案建议使用 Windows 2000 资源工具包工具中的Timethis.exe(就像Unix 系统的时间一样)。示例用法

...

这些程序使用以下命令运行:

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

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

VS编译器:

  • 7.359
  • 7.359
  • 7.296

海合会:

  • 1.906
  • 1.906
  • 1.937

...

所以根本不涉及Visual Studio。

另一个这样的小实用程序是ptime

于 2009-10-30T06:07:40.557 回答
2

如果您想在不更改代码的情况下对程序的各个部分进行计时,那么您需要使用分析器。

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

您可能还想查看此问题中关于免费选项的建议,其中推荐SleepyAMD 的 CodeAnalyst for Windows

于 2009-11-01T10:44:26.853 回答
0

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

于 2021-05-20T11:14:46.597 回答