2015-06-23 20 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,雖然我看不到任何會導致內存從康涅狄格州物體泄漏:

「供應商= Microsoft.SQLSERVER.CE.OLEDB.3.5;數據源= 「C:\ Temp \ acctprod.sdf」; ssce:數據庫密碼='密碼';「

回答

0

將CoInitializeEx與COINIT_MULTITHREADED一起使用,而不是僅使用CoInitialize修復泄漏。但我不確定何時/爲什麼要使用COINIT_MULTITHREADED或COINIT_APARTMENTTHREADED?

HRESULT hResult = CoInitializeEx(NULL,COINIT_MULTITHREADED);