偶在用c++ 向mysql不停的写入数据的时候。
会出现问题:
1.内存在一点点的向上加(有耗内存的操作?)代码里好像没有申请内存操作。
2.当内存到了极限时(1.96)时会出现如题:“mysql server has gone away”
再也插不进数据。会提示错误。用到的代码:
sprintf(m_szBuffer,"SELECT * FROM %s WHERE %s",szTableName,szCondition);
if(0 !=mysql_query(&mysql,m_szBuffer))
{//查表出错
return FALSE;
}
m_res=mysql_store_result(&mysql);//把查询的结果存起来
if (m_res ==NULL)
return FALSE;
int count=mysql_num_rows(m_res);
if(count <=0)
{return FALSE;}
return TRUE;------------------
请问一下,上面有耗内存的操作吗?做极限测试(不停的向数据库写数据时)内存会慢慢积累,直到耗尽.

解决方案 »

  1.   

    你得结果集只打开没有关闭,建议重新关闭再打开m_res试试...,
      

  2.   

    上面的代码只是类中的一个函数,
    但是只作这种查询操作的时候,也会出现每次占用12个字节,慢慢的积累。
    外面访问这这样子:
    数据库初始化的时候就已经打开,
    g_pDB->myDBQuery(szTablename,szCondion);
    m_szBuffer=new char[256];
    怀疑:是不是m_res集太多,造成的内存碎片????
      

  3.   

    结果集只open从来不close估计有问题
      

  4.   

    m_szBuffer 是静态成员变量,只在初始化的时候分配过,有查过,跟这个无关。
    除此之外,再没有其它new 操作。
      

  5.   

    你先将Mysql的3个function一个一个地放出来,看看到底是哪个有影响。
      

  6.   

    找到原因:
    我定的MYSQL_RES *m_res是成员变量,现改成临时变量,放在每个查询函数里,每完成一次查询一次就free掉。程序运行了一晚上,没有发现内存占有的情况。
    while (1)
    {
    sprintf(szAccount,"hao%d",i);
    sprintf(buf,"user_Account='%s'",szAccount);
    if(test.GetRecordCondition("player",buf))
    {
    test.GetRecordFieldInt("user_Id", nData);
    }
    }
    thanks all