确定我的代码在MFC中执行所花费的时间

时间:2013-07-09 06:18:09

标签: visual-studio-2010 visual-studio visual-c++ mfc visual-c++-2010

我需要一种方法来查找函数所花费的时间,以及函数内部代码的一部分来执行
Visual Studio是否提供了执行此操作的任何机制,或者是否可以使用MFC功能从程序中执行此操作?我是MFC的新手,所以我不确定如何做到这一点。我认为这应该是一个非常简单的操作,但我找不到任何关于如何做到这一点的例子

2 个答案:

答案 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);

我使用这种方法来优化图形代码,找到屏幕更新所需的时间等。还有其他方法可以做同样或类似的事情,但这很简单。