私はADO.NET(データベース)を使用してクラスを作成しています。現在、データベースに多くの行を入力してシミュレーションしています。 My機能は、次のいずれかです。メモリ不足例外@ 50Mbメモリ使用量
void CDatabaseAccess::AjouterEchantillon(double tension, double intensite)
{
OleDbCommand^ cmd = gcnew OleDbCommand("INSERT INTO echantillons (id_course, tension, intensite) VALUES ('"+CDatabaseAccess::GetLastIdCourse()+"', '"+tension+"', '"+intensite+"')", conn);
OleDbDataReader^ cmdReader = cmd->ExecuteReader();
delete cmd;
delete cmdReader;
}
私はこのfor
ループでこの関数を呼び出すしようとすると、私は問題に直面しています:
for (int j = 0; j < 100; j++) {
database->AjouterEchantillon(rDouble, j);
Threading::Thread::Sleep(10);
}
は私の問題は次のとおりです:メモリは、それまで上げておきます私のアプリが約50Mbのメモリ使用量のときにクラッシュします。ガベージコレクタが機能していないか、cmdReader
が削除されずにメモリに残っているようです。私はこれを引き起こす原因を知りたい。
これらは使い捨てのオブジェクトです。これらのオブジェクトを削除しないと、GCが頻繁に実行されず、管理されていない*リソースが不足することがあります。 'delete'演算子またはスタックセマンティクスを使用します。 –
私はすでに 'delete cmd'と' delete cmdReader'を私の関数の最後に使ってみましたが、これは何も変わりません。プログラムがクラッシュし続ける – Rameleu
再送信コードを投稿するうれしい仕事です。削除の呼び出しが必要であることをすでに知っている場合、意図的にあなたのスニペットからそれを省略することは愚かなことです。あなたは決して有効な答えを得ることはありません。 –