是否有一种快速简便的方法来计算程序(或整个程序)的一部分,而无需在程序本身内设置计时器类,函数和变量?
我特指的是Visual C ++(Professional 2008)。
谢谢,
-Faken
编辑:这些答案都不符合我的要求,我希望能够在visual c ++中计算一个程序,而不必在其中编写额外的代码。类似于人们在Linux中使用BASH的方式。
答案 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 :(得分:3)
Visual Studio有profiler,但您可能需要比Pro更高的SKU才能访问它(例如,Team System Development Edition)。我不确定剖析器是否有实际时间。从链接的文章看,它看起来好像只是做采样,这可以告诉你哪些功能花费的时间最多。
回到VC6时代,有用于分析的命令行工具(PREP
,PROFILE
和PREPORT
)。那些可以做时间和抽样。建立一个更好的分析器是很好的,但限制它到数千美元的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)
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中有关免费选项的建议,建议使用Sleepy和AMD's CodeAnalyst for Windows。
答案 5 :(得分:0)
在 VS19 中,您可以直接开始调试并使用 PerfTips。该行末尾的灰色文本会告诉您自上次休息以来已经过去了多长时间。您可以通过打开诊断工具窗口中的事件标签来更好地了解这一点。