我需要一种方法来查找函数所花费的时间,以及函数内部代码的一部分来执行
Visual Studio是否提供了执行此操作的任何机制,或者是否可以使用MFC功能从程序中执行此操作?我是MFC的新手,所以我不确定如何做到这一点。我认为这应该是一个非常简单的操作,但我找不到任何关于如何做到这一点的例子
答案 0 :(得分:3)
快速,但非常不精确,是使用GetTickCount():
DWORD time1 = GetTickCount();
// Code to profile
DWORD time2 = GetTickCount();
DWORD timeElapsed = time2-time1;
问题是GetTickCount()使用系统计时器,其典型分辨率为10 - 15 ms。所以只适用于长计算。
它无法区分运行2 ms的函数和需要9 ms的函数之间的区别。但如果你在秒范围内,那就足够了。
如果您需要更高的分辨率,可以使用性能计数器,正如RedEye解释的那样。
或者您可以尝试使用探查器(也许这就是您要找的?)。见this question.
答案 1 :(得分: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);
我使用这种方法来优化图形代码,找到屏幕更新所需的时间等。还有其他方法可以做同样或类似的事情,但这很简单。