分享一个性能统计的简单封装类

在查找问题,优化性能时,不免用到GetTickCount来统计函数耗时。

不断的

DWORD tick_beg = GetTickCount();

DWORD tick_end = GetTickCount();

DWORD tick_span = tick_end - tick_beg;

着实麻烦

简单地封装了一下。

主要提供的接口是

 AutoTick tick(__FUNCTIONW__);

利用作用域在对象析构时自动计算打印。


/********************************************************************
created:	2016/11/11
file   :	autotick.h
author :	tulip
wiki   :   
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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值