2015-06-23 1 views
0

Я выделил свой код только для этого - запуск его приводит к небольшой утечке памяти. Может ли кто-нибудь понять, почему?ADO Закрыть, не освобождая всю память - небольшая утечка

HRESULT hResult = CoInitialize(NULL); 
if ((hResult != S_OK) && (hResult != S_FALSE)) 
    return; 

_ConnectionPtr conn; 
hResult = conn.CreateInstance(__uuidof(Connection)); 
if (hResult != S_OK) 
    { 
    CoUninitialize(); 
    return; 
    } 

conn->CursorLocation = adUseClient; 
conn->Open(sConnectionString, L"", L"", adConnectUnspecified); 

if (conn) 
    { 
    conn->Close(); 
    conn.Release(); 
    conn=NULL; 
    } 

CoUninitialize(); 
return; 

Это sConnectionString, хотя я не вижу ничего, что вызвало бы память просачиваться из Conn объекта:

«Provider = Microsoft.SQLSERVER.CE.OLEDB.3.5; Источник данных = "C: \ Temp \ acctprod.sdf"; ssce: database password = 'password';

ответ

0

Использование CoInitializeEx с COINIT_MULTITHREADED вместо просто CoInitialize фиксирует утечку. Но я не уверен, когда/зачем использовать COINIT_MULTITHREADED или COINIT_APARTMENTTHREADED?

HRESULT hResult = CoInitializeEx(NULL,COINIT_MULTITHREADED);