IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁操作系統(tǒng)LINUX → 關(guān)于freetds內(nèi)存泄漏的問題

關(guān)于freetds內(nèi)存泄漏的問題

時(shí)間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  在使用freetds時(shí)發(fā)現(xiàn)進(jìn)行頻繁的連接,關(guān)閉數(shù)據(jù)庫時(shí),出現(xiàn)內(nèi)存持續(xù)增長。在網(wǎng)上搜索了一下,國內(nèi)的文章就那幾篇,和我使用的方法一樣。最后在官方網(wǎng)站上找到了原因,所以寫出來,供大家參考使用,下面的代碼,是從網(wǎng)上找的,紅色部分是需要增加的。該示例只執(zhí)行一次,所以隱藏了內(nèi)存泄漏的問題。

  Freetds的作者說dbinit,dbexit必須執(zhí)行一次,再測試過程中執(zhí)行多次也沒事。

  #include <stdio.h>

  #include <string.h>

  #include <stdlib.h>

  #include <unistd.h>

  #include <sybfront.h>

  #include <sybdb.h>

  int main(void)

  {

  while(1)

  {

  char szUsername[32] = "test";

  char szPassword[32] = "test";

  char szDBName[32] = "test";

  char szServer[32] = "2.2.2.2:1433";

  //初始化db-library

  dbinit();

  //連接數(shù)據(jù)庫

  LOGINREC *loginrec = dblogin();

  DBSETLUSER(loginrec, szUsername);

  DBSETLPWD(loginrec, szPassword);

  DBPROCESS *dbprocess = dbopen(loginrec, szServer);

  if(dbprocess == FAIL){

  printf("ASB>>      Conect MS sql server fail \n");

  return 0;

  }else{

  printf("ASB>>      ConnectEMS conect MS SQL SERVER success\n");

  }

  if(dbuse(dbprocess, szDBName) == FAIL){

  printf("ASB>>      Open database name fail\n");

  }else{

  printf("ASB>>      Open database name success\n");

  }

#p#副標(biāo)題#e#

  //查詢數(shù)據(jù)庫

  dbcmd(dbprocess, "select ID,BeginTime,Description from Alarms");

  if(dbsqlexec(dbprocess) == FAIL){

  printf("ASB>>      Query Alarms table error\n");

  }

  DBINT result_code;

  char szID[1024];

  char szBeginTime[1024];

  char szDescription[1024];

  int rows = 0;

  while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){

  if (result_code == SUCCEED){

  dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)szID);

  dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)szBeginTime);

  dbbind(dbprocess, 3, CHARBIND, (DBCHAR)0, (BYTE*)szDescription);

  while (dbnextrow(dbprocess) != NO_MORE_ROWS){

  printf("ASB>> ID=%s\n", szID);

  printf("ASB>> szAid=%s\n", szBeginTime);

  printf("ASB>> szBeginTime=%s\n", szDescription);

  }

  }

  }

  //關(guān)閉數(shù)據(jù)庫連接

  dbclose(dbprocess);

  dbloginfree(loginrec);

  dbexit();

  usleep(1000);

  }

  return 0;

  }

關(guān)鍵詞標(biāo)簽:freetds,內(nèi)存泄漏

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會(huì)話使用screen管理你的遠(yuǎn)程會(huì)話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連

相關(guān)下載

人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址linux tc實(shí)現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號(hào)linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負(fù)載