C++记录函数执行时间
2014 年 6 月 3 日 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
#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
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
}
{
#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
}
{
#ifdef RECORD_DB_TIME
fclose(m_txt);
#endif
}
5.之后在要记录时间函数体开头添加_start();末尾添加_end(_func_);即可。
Tags: sqlite time cost 函数执行时间
发表评论