初心者です。VC++でODBC接続してレコードの監視プログラムを作成、メモリ消費量がうなぎのぼりで困っております。
MySQLのレコードをODBCで読みに行くVC++プログラムでtableテーブルになにかレコードができたら処理を行う監視プログラムを作成しました。問題なく動作しているのですが、メモリ消費をみるとselectがかかるたびにメモリがぐんぐん増えてゆきます。
メモリリークというか、そもそものプログラムの手段が間違っているのでしょうか。ご教示いただけますと幸いです。
VC++
1#define ODBCset2 "Driver=○○○;Server=○○○;DATABASE=○○○;UID=○○○;PWD=○○○;" 2using namespace System; 3using namespace System::Data::Odbc; 4 5int main() 6 while(true){ 7 try { 8 OdbcConnection^ ODB = gcnew OdbcConnection(); 9 ODB->ConnectionString = ODBCset2;// 10 #↓ここからメモリリーク 11 ODB->Open();//ODBCに接続する 12 OdbcCommand^ Cmd = gcnew OdbcCommand("select count(*) from table", ODB); 13 14 15 OdbcDataReader^ read = Cmd->ExecuteReader(); 16 read->Read(); //1行目を読む 17 c_data = read[0]->ToString(); 18 read->Close(); 19 count = int::Parse(c_data);//String^ to int 20 if (count >= 1)#tableにレコードが1つ以上あったら 21 { 22 #処理実行してレコードを削除する 23 } 24 25 ODB->Close(); 26 ODB->ReleaseObjectPool(); 27 delete ODB; 28 ODB = nullptr; 29 30 31 } 32 catch (...) { 33 #接続エラーの表示 34 } 35 } 36} 37
プログラム開始とともに使用メモリは30MBくらいからみるみる増加し、1時間で300MB超えてしまいます。
ODBCをopen()でメモリリークが発生しているようですが、解放がこのコードではできていないようです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/23 07:11 編集
2019/06/23 07:22
2019/06/23 10:19
2019/06/23 10:59
2019/06/23 11:30
2019/06/23 11:39