switch与if 性能测试
测试结果:switch性能更高。
测试过程:新建一个Win32 Console Application, 在cpp文件中添加下面代码
#include "stdafx.h" #include <Windows.h> void SwitchTime(int a) { for (int i = 0; i < 1000000000; ++i) { switch(a) { case 0: a = 0; break; case 1: a = 0; break; case 2: a = 0; break; case 3: a = 0; break; case 4: a = 0; break; case 5: a = 0; break; case 6: a = 0; break; case 7: a = 0; break; case 8: a = 0; break; case 9: a = 0; break; case 10: a = 0; break; case 11: a = 0; break; case 12: a = 0; break; case 13: a = 0; break; case 14: a = 0; break; case 15: a = 0; break; case 16: a = 0; break; case 17: a = 0; break; case 18: a = 0; break; case 19: a = 0; break; default: a = 0; break; } } } void IfTime(int a) { for (int i = 0; i < 1000000000; ++i) { if (0 == a) { a = 0; } else if (1 == a) { a = 0; } else if (2 == a) { a = 0; } else if (3 == a) { a = 0; } else if (4 == a) { a = 0; } else if (5 == a) { a = 0; } else if (6 == a) { a = 0; } else if (7 == a) { a = 0; } else if (8 == a) { a = 0; } else if (9 == a) { a = 0; } else if (10 == a) { a = 0; } else if (11 == a) { a = 0; } else if (12 == a) { a = 0; } else if (13 == a) { a = 0; } else if (14 == a) { a = 0; } else if (15 == a) { a = 0; } else if (16 == a) { a = 0; } else if (17 == a) { a = 0; } else if (18 == a) { a = 0; } else if (19 == a) { a = 0; } else { a = 0; } } } int _tmain(int argc, _TCHAR* argv[]) { unsigned long switchBegin= ::GetTickCount(); SwitchTime(0); unsigned long switchEnd= ::GetTickCount(); unsigned long ifBegin= ::GetTickCount(); IfTime(0); unsigned long ifEnd= ::GetTickCount(); char result[128]; memset(result, 0, sizeof(result)); sprintf(result, "SwitchTime: %d ms, IfTime: %d ms", switchEnd - switchBegin, ifEnd - ifBegin); MessageBoxA(NULL, result, "switch与if 性能测试", MB_OK); return 0; }
分别测试输入值0、10、19、20、-1、200
运行exe效果如下,