主页 > 未分类 > C++记录函数执行时间

C++记录函数执行时间

程序执行过程中可能有的地方会耗费较多的时间,找到耗时较多的地方后可以进行优化处理。如下为一个数据库操作类中记录函数执行时间的实现:

1.在头文件中声明变量及函数:

#ifdef _DEBUG
#define RECORD_DB_TIME
#define RECORD_DATA_TIME
#endif

#define __func__ __FUNCTION__

private:
  void _start();
  void _end(char* func);
private:
  //std::string m_dbFilePath;
 SQLite::Database db;

#ifdef RECORD_DB_TIME
 DWORD m_tick;
 DWORD m_time;
 FILE *m_txt;
  char m_buf[100];
#endif

2.在cpp文件构造函数中初始化:

#ifdef RECORD_DB_TIME
  m_time = 0;
 CString text = getExePath()+_T("time_db.txt");
  fopen_s(&m_txt, c2s(text).c_str(), "a+");
#endif

3.函数实现:

void CDataBaseHelper::_start()
{
#ifdef RECORD_DB_TIME
  m_tick = GetTickCount();
#endif
}

void CDataBaseHelper::_end(char* func)
{
#ifdef RECORD_DB_TIME
 m_tick = GetTickCount() - m_tick;
 m_time += m_tick;
 time_t t = time(NULL);
  memset(m_buf, 0, 100);
  sprintf_s(m_buf, "%d: %s() --> tick: %dms, time: %dms\n", (int)t, func, m_tick, m_time);
 fputs(m_buf, m_txt);
#endif
}

4.在析构函数中释放:

CDataBaseHelper::~CDataBaseHelper(void)
{
#ifdef RECORD_DB_TIME
 fclose(m_txt);
#endif
}

5.之后在要记录时间函数体开头添加_start();末尾添加_end(_func_);即可。

发表评论

邮箱地址不会被公开。 必填项已用*标注