在查找問題,優化性能時,不免用到GetTickCount來統計函數耗時。
不斷的
DWord tick_beg = GetTickCount();
DWORD tick_end = GetTickCount();
DWORD tick_span = tick_end - tick_beg;
著實麻煩
簡單地封裝了一下。
主要提供的接口是
AutoTick tick(__FUNCTIONW__);
利用作用域在對象析構時自動計算打印。
/********************************************************************created: 2016/11/11file : autotick.hauthor : tulipwiki : purpose: 統計性能耗時 主要由析構計算, GetCurrentConsume: 獲取對象構造到當前的耗時 GetLastConsume: 獲取上次計算時間點到當前時間點的耗時 *********************************************************************/#ifndef _AUTO_TICK_H_#define _AUTO_TICK_H_class AutoTick {public: AutoTick(LPTSTR tip) { tip_ = tip; begin_ = GetTickCount(); last_tick_ = begin_; } AutoTick() { AutoTick(L"");} ~AutoTick() { end_ = GetTickCount(); DWORD span = end_ - begin_; TCHAR str[1024] = { 0 }; _itow_s(span, str, 1024, 10); std::wstring strout(L" span:/t/t"); std::wstring tip = tip_ + strout + str + std::wstring(L"/r/n"); OutputDebugString(tip.c_str()); } // 獲取當前的耗時(當前 - 構造) DWORD GetCurrentConsume(LPTSTR flag = NULL) { DWORD tick_curr = GetTickCount() - begin_; if (flag != NULL) { TCHAR str[1024] = { 0 }; _itow_s(tick_curr, str, 1024, 10); std::wstring strout(L"Contrust Consume:/t/t"); std::wstring tip = flag + strout + str + std::wstring(L"/r/n"); OutputDebugString(tip.c_str()); } return tick_curr; } DWORD GetCurrentConsume(int index) { TCHAR ach[64] = { 0 }; _itot_s(index, ach, 10); GetCurrentConsume(ach); } // 獲取距離上次計時的耗時(當前 - 上次) DWORD GetLastConsume(LPTSTR flag = NULL) { DWORD curr_tick = GetTickCount(); DWORD tick_span = last_tick_ - curr_tick; if (flag != NULL) { TCHAR str[1024] = { 0 }; _itow_s(tick_span, str, 1024, 10); std::wstring strout(L"Last Consume:/t/t"); std::wstring tip = flag + strout + str + std::wstring(L"/r/n"); OutputDebugString(tip.c_str()); } last_tick_ = curr_tick; return tick_span; } DWORD GetLastConsume(int index) { TCHAR ach[64] = { 0 }; _itot_s(index, ach, 10); return GetLastConsume(ach); } DWORD begin_; DWORD end_; DWORD last_tick_; std::wstring tip_;};#endif
新聞熱點
疑難解答