В моем приложении я сталкиваюсь с утечками памяти.Полное приложение является многопоточным, и каждый поток подключается к одной и той же БД (Microsoft SQL Server 2014 SP3) через драйвер ODBC 13.1.Приложение открывает и динамически закрывает необходимый набор записей.
Я изучаю свой код и теперь указываю пальцем на функцию набора записей Close()
.Я написал этот пример кода, который вызывает утечку памяти для меня.
CCellsSet - это класс потребительского ODBC MFC, созданный Visual Studio Wizard, который наследует от CRecordset.
Я также пробовал использовать более свежие версии SQL Server, но у меня был такой же сценарий.
На моей машине каждая пара rs.Open () и rs.Close () вызывает утечку около 1Kb.
Здесь ссылка на Open и Close на msdnв связи с этим достаточно вызвать Close (), чтобы избежать утечек.
void Test(CDatabase* ptr_db)
{
CCellsSet rs;
rs.m_pDatabase = ptr_db;
rs.Open();
rs.Close();
}
int main()
{
CDatabase DB;
DB.OpenEx("DSN=__myDNS__;UID=sa;PWD=__myPWD__", CDatabase::noOdbcDialog);
for (long i = 0; i < 1000; i++)
{
printf("loop '%d' \n", i);
Test(&DB);
}
if (DB.IsOpen())
{
DB.Close();
}
return 0;
}