问题描述:一个服务程序每次循环就占用100k左右内存,不知道哪里有内存泄露。望大虾们帮忙看看。
代码如下:
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
int final = 0;
int guessmax = 0;
int copyjoinNum = 0;
MYSQL* mysql;
mysql = mysql_init(NULL);
if(mysql == NULL)
{ mysql_library_end(); }
if (NULL == mysql_real_connect(mysql,host,uname,upassword,db,3306,NULL,0))
{ mysql_library_end(); }
mysql_set_character_set(mysql,"gbk");
char sql[5000] = {0};
char balloneState[5000]={0};
int currenttime = CTime::GetCurrentTime().GetTime();
sprintf(sql,"select count(oid) from table);
int rc = mysql_query(mysql,sql);
MYSQL_RES *result = mysql_store_result(mysql);
MYSQL_ROW localrow = mysql_fetch_row(result);
int resultcount = atoi(localrow[0]);
mysql_free_result(result);
if(resultcount>0)
{ 略 }
else
{ //写一个字符串到txt文件
sprintf(balloneState,"{'status':'5'},'result_info':[]}");
int result = WriteToLog(balloneState);
if (result)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
Sleep(3000);
}
mysql_close(mysql);
mysql_library_end();
}每次循环都占用一定的内存,怎么解决阿? 是不是开头那几个变量每次都占用内存? 如何让每次执行一次后就清空一下内存空间呢?
代码如下:
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
int final = 0;
int guessmax = 0;
int copyjoinNum = 0;
MYSQL* mysql;
mysql = mysql_init(NULL);
if(mysql == NULL)
{ mysql_library_end(); }
if (NULL == mysql_real_connect(mysql,host,uname,upassword,db,3306,NULL,0))
{ mysql_library_end(); }
mysql_set_character_set(mysql,"gbk");
char sql[5000] = {0};
char balloneState[5000]={0};
int currenttime = CTime::GetCurrentTime().GetTime();
sprintf(sql,"select count(oid) from table);
int rc = mysql_query(mysql,sql);
MYSQL_RES *result = mysql_store_result(mysql);
MYSQL_ROW localrow = mysql_fetch_row(result);
int resultcount = atoi(localrow[0]);
mysql_free_result(result);
if(resultcount>0)
{ 略 }
else
{ //写一个字符串到txt文件
sprintf(balloneState,"{'status':'5'},'result_info':[]}");
int result = WriteToLog(balloneState);
if (result)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
Sleep(3000);
}
mysql_close(mysql);
mysql_library_end();
}每次循环都占用一定的内存,怎么解决阿? 是不是开头那几个变量每次都占用内存? 如何让每次执行一次后就清空一下内存空间呢?
int WriteToLog(char* str)
{
CFile fok;
while (!fok.Open(LOGFILE, CFile::modeCreate|CFile::modeReadWrite))
{
return -1;
}
BYTE buffer[102400];
memset(buffer, 0, 102400);
int i = GBKToUTF8((unsigned char*)(LPCSTR)str, buffer, 102400); //以utf8格式写入txt文本
BYTE pHeaher[] = {0xEF, 0xBB, 0xBF};
fok.Write(pHeaher, 3);
fok.Write(buffer, i);
fok.Close();
return 0;
}这里好像没有什么问题吧!?