?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Flag Next Entry
Преждевременная оптимизация-2
nyaload
_winnie
Думал, такое бывает только в шутках про "секретные базы темных джедаев". Тем не менее, я сегодня нашёл ::Sleep(1) внутри главного цикла игры.
Исходя из окружающего кода и местоположения (получение статистики про FPS), считаю что его там забыли, как хирург обычно забывает скальпель внутри оперируемого.
В среднем ::Sleep(1) выполняется две миллисекунды, и удаление этого левого кода увеличивает FPS с 50 до 55.

updated. Поддержка заявила что Sleep в счетчике FPS - это таки что бы другие потоки могли загружать в фоне ресурсы. Пипец, даже если ничего не грузится, то всё равно поспим на каждом кадре. Впрочем, сказали что на многоядерной системе можно Sleep убрать.


  • 1
а какая вынь/железо? чем мерилось общее время?
а 1000 не мало ли?
я попробую 100000 на досуге.

код:

#include <windows.h>
#include <stdio.h>

const int N = 1000;
double samples[N];

int main()
{
	LARGE_INTEGER frequency; 
	QueryPerformanceFrequency( &frequency );
	
	LARGE_INTEGER a, b;

	for (int i = 0; i < 1000; ++i)
	{
		QueryPerformanceCounter( &a );
		::Sleep(1);
		QueryPerformanceCounter( &b );
		
		samples[i] = double(b.QuadPart - a.QuadPart) / frequency.QuadPart;
	}
	
	for (int i = 0; i < 1000; ++i)
		printf("%g\n", samples[i]);
}


Результат: http://www.everfall.com/paste/id.php?ib4uhysgc92s
Почти все значения - вокруг 1.9.


тот же код даёт у меня

0.000933873
0.00104446
0.000958833
0.000999152
0.00109553
т.е. всё около 1мс

win7x64, 2xW3520@2.66Ghz

где бы взять одноядерную машину померить %)

  • 1