我需要一种方法来找出函数所花费的时间,以及函数内的一段代码来执行
Visual Studio 是否提供任何机制来执行此操作,或者是否可以从使用 MFC 的程序中执行此操作功能?我是 MFC 的新手,所以我不确定如何做到这一点。我认为这应该是一个非常简单的操作,但我找不到任何关于如何做到这一点的例子
问问题
1028 次
2 回答
3
一种快速但不精确的方法是使用GetTickCount():
DWORD time1 = GetTickCount();
// Code to profile
DWORD time2 = GetTickCount();
DWORD timeElapsed = time2-time1;
问题是 GetTickCount() 使用系统计时器,其典型分辨率为 10 - 15 毫秒。所以它只对长计算有用。
它无法区分需要 2 毫秒运行的函数和需要 9 毫秒的函数。但是,如果您在秒范围内,那可能就足够了。
如果您需要更高的分辨率,您可以使用性能计数器,正如 RedEye 解释的那样。
或者你可以试试探查器(也许这就是你要找的东西?)。看到这个问题。
于 2013-07-09T13:48:31.163 回答
2
可能有更好的方法,但我这样做:
// At the start of the function
LARGE_INTEGER lStart;
QueryPerformanceCounter(&lStart);
LARGE_INTEGER lFreq;
QueryPerformanceFrequency(&lFreq);
// At the en of the function
LARGE_INTEGER lEnd;
QueryPerformanceCounter(&lEnd);
TRACE("FunctionName t = %dms\n", (1000*(lEnd.LowPart - lStart.LowPart))/lFreq.LowPart);
我经常使用这种方法来优化图形代码、查找屏幕更新所花费的时间等。还有其他方法可以做相同或类似的事情,但这既快速又简单。
于 2013-07-09T13:15:14.757 回答