質問編集履歴
3
コード更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
MySQLのレコードをODBCで読みに行くVC++プログラムでtableテーブルになにかレコードができたら処理を行う監視プログラムを作成しました。問題なく動作しているのですが、メモリ消費をみるとselectがかかるたびにメモリがぐんぐん増えてゆきます。
|
4
4
|
メモリリークというか、そもそものプログラムの手段が間違っているのでしょうか。ご教示いただけますと幸いです。
|
5
5
|
|
6
|
-
```
|
6
|
+
```VC++
|
7
7
|
#define ODBCset2 "Driver=○○○;Server=○○○;DATABASE=○○○;UID=○○○;PWD=○○○;"
|
8
8
|
using namespace System;
|
9
9
|
using namespace System::Data::Odbc;
|
@@ -13,6 +13,7 @@
|
|
13
13
|
try {
|
14
14
|
OdbcConnection^ ODB = gcnew OdbcConnection();
|
15
15
|
ODB->ConnectionString = ODBCset2;//
|
16
|
+
#↓ここからメモリリーク
|
16
17
|
ODB->Open();//ODBCに接続する
|
17
18
|
OdbcCommand^ Cmd = gcnew OdbcCommand("select count(*) from table", ODB);
|
18
19
|
|
@@ -42,4 +43,5 @@
|
|
42
43
|
|
43
44
|
```
|
44
45
|
|
45
|
-
プログラム開始とともに使用メモリは30MBくらいからみるみる増加し、1時間で300MB超えてしまいます。
|
46
|
+
プログラム開始とともに使用メモリは30MBくらいからみるみる増加し、1時間で300MB超えてしまいます。
|
47
|
+
ODBCをopen()でメモリリークが発生しているようですが、解放がこのコードではできていないようです。
|
2
コードの更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -22,9 +22,9 @@
|
|
22
22
|
c_data = read[0]->ToString();
|
23
23
|
read->Close();
|
24
24
|
count = int::Parse(c_data);//String^ to int
|
25
|
-
if (count >= 1)
|
25
|
+
if (count >= 1)#tableにレコードが1つ以上あったら
|
26
26
|
{
|
27
|
-
#処理
|
27
|
+
#処理実行してレコードを削除する
|
28
28
|
}
|
29
29
|
|
30
30
|
ODB->Close();
|
@@ -35,7 +35,7 @@
|
|
35
35
|
|
36
36
|
}
|
37
37
|
catch (...) {
|
38
|
-
|
38
|
+
#接続エラーの表示
|
39
39
|
}
|
40
40
|
}
|
41
41
|
}
|
1
コードの更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
|
6
6
|
```
|
7
7
|
#define ODBCset2 "Driver=○○○;Server=○○○;DATABASE=○○○;UID=○○○;PWD=○○○;"
|
8
|
+
using namespace System;
|
9
|
+
using namespace System::Data::Odbc;
|
8
10
|
|
9
11
|
int main()
|
10
12
|
while(true){
|