是否有一种快速简便的方法来计时程序的一部分(或整个事物),而无需在我的程序本身内部设置计时器类、函数和变量?
我特别指的是 Visual C++ (Professional 2008)。
谢谢,
- 伪造
编辑:这些答案都没有满足我的要求,我希望能够在 Visual c++ 中为程序计时,而不必在其中编写额外的代码。类似于人们在 Linux 中使用 BASH 的方式。
是否有一种快速简便的方法来计时程序的一部分(或整个事物),而无需在我的程序本身内部设置计时器类、函数和变量?
我特别指的是 Visual C++ (Professional 2008)。
谢谢,
- 伪造
编辑:这些答案都没有满足我的要求,我希望能够在 Visual c++ 中为程序计时,而不必在其中编写额外的代码。类似于人们在 Linux 中使用 BASH 的方式。
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
注意事项:
Visual Studio 有一个分析器,但您可能需要比 Pro 更高的 SKU 才能访问它(例如,Team System Development Edition)。我不确定分析器是否进行实际计时。从链接的文章中,它看起来好像只是进行采样,它可以告诉您哪些函数花费的时间最多。
早在 VC6 时代,就有用于分析的命令行工具(PREP
、PROFILE
和PREPORT
)。那些可以进行计时和采样。构建一个更好的分析器固然很好,但将其限制在数千美元的 SKU 会使较小的 ISV 和业余爱好者无法参与其中。
在 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;
}
}
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。
如果您想在不更改代码的情况下对程序的各个部分进行计时,那么您需要使用分析器。
Visual Studio Team System(或 VS2010 中的 Premium)有一个分析器,但它在 Professional 中不可用。其他广受好评的选项是AQTime(试用 30 天)和Redgate 的 ANTS profiler(试用两周)。
您可能还想查看此问题中关于免费选项的建议,其中推荐Sleepy和AMD 的 CodeAnalyst for Windows。
在 VS19 中,您可以开始调试并使用PerfTips。行尾的灰色文本将告诉您自上次休息以来已经过去了多少时间。通过打开诊断工具窗口中的事件选项卡,您可以更好地了解这一点。