我使用OpenGL,Qt,C ++编写了一个3D模型显示程序。但是我发现了一些奇怪的东西。那就是Release模式版本中的FPS(每秒帧数)低于调试模式版本。现在我发布他们的FPS:< / p>
左边是调试模式版本,右边是发布模式版本:
我用来计算FPS的函数是
void displayFPS()
{
static float framesPerSecond = 0.0f; // This will store our fps
static float lastTime = 0.0f; // This will hold the time from the last frame
float currentTime = GetTickCount() * 0.001f;
++framesPerSecond;
if( currentTime - lastTime > 1.0f )
{
framesPerSecond/=currentTime - lastTime;
char strFrameRate[256];
lastTime = currentTime;
sprintf_s(strFrameRate,256, "FPS : %f", framesPerSecond);
cout << strFrameRate << endl;
framesPerSecond = 0;
}
}
我想知道怎么会发生这种情况?发布模式不应该比调试模式更快吗?有人可以告诉我为什么吗?
答案 0 :(得分:1)
根据this, GetTickCount()的准确性要比毫秒差。它甚至可以达到55毫秒!使用更可靠的方法来测量时间间隔,如下所示:
#include <windows.h>
#include <cstdint>
typedef std::int64_t int64;
// get duration of a single "clock" in microseconds
double
get_clock_duration()
{
LARGE_INTEGER f;
QueryPerformanceFrequency(&f);
return 1000000.0 / double(f.QuadPart);
}
// get number of elapsed clocks from program start
int64
clocks()
{
LARGE_INTEGER t;
QueryPerformanceCounter(&t);
return t.QuadPart;
}
// convert a duration in clocks to a duration in milliseconds
double
milliseconds(int64 t)
{
return get_clock_duration() * double(t) * 0.001;
}