我正在使用ADO.NET(數據庫)類,我目前正在模擬輸入很多行到我的數據庫。我的功能是以下之一:內存不足異常@ 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運行不夠頻繁,那麼您肯定會用完* unmanaged *資源。使用'delete'運算符或堆棧語義。 –
我已經嘗試在我的函數結尾處使用'delete cmd'和'delete cmdReader',但這不會改變任何內容。該程序不斷崩潰 – Rameleu
好,張貼repro代碼很好的工作。如果您已經知道調用delete是必需的,那麼有意將它從代碼片段中省略是一件愚蠢的事情,您永遠不會得到可用的答案。 –