Daten in SAFEARRAY freigeben
-
Hallo zusammen!
Ich stehe vor dem Problem, dass ein Prozess immer mehr Speicher verbraucht. Ich bin dahintergekommen, dass verm. ein SAFEARRAY bzw. die darin gespeichert oder referenzierten Daten nicht suaber freigegeben wird und deshalb der Speicherverbrauch ansteigt. Folgendes wird bisher gemacht:
SAFEARRAYBOUND rgsabound[1]; SAFEARRAY *psaAttributeSymbols = NULL; h_Result = o_ITNCTable->ReceiveTableLines(o_QuellFile, o_SQLCommand, &psaAttributeSymbols); if(SUCCEEDED(h_Result)) { long lLBound; long lUBound; long lIndex; long ii; CComBSTR AttributeSymbol; if ( (SafeArrayGetDim(psaAttributeSymbols) == 1) && (SafeArrayGetLBound(psaAttributeSymbols, 1, &lLBound) == S_OK) && (SafeArrayGetUBound(psaAttributeSymbols, 1, &lUBound) == S_OK) ) { AttributeSymbol.Empty(); for (ii = lLBound; ii <= lUBound; ii++) { lIndex = ii; h_Result = SafeArrayGetElement(psaAttributeSymbols, &lIndex, &AttributeSymbol); if(SUCCEEDED(h_Result)) { _bstr_t o_String = AttributeSymbol; .... } else { i_LastError = GetLastError(); // Schleife abbrechen break; } AttributeSymbol.Empty(); } } } SafeArrayDestroyData(psaAttributeSymbols);
Passt das so oder was mache ich falsch??
Vielen Dank für jeden Tipp
Armin
-
Nur so als Tipp:
http://www.codeproject.com/tools/leakfinder.asp
-
Schaut nicht falsch aus. Die Frage ist nur, ob vielleicht vor dem SafeArrayDestroyData eine Exception geworfen wird.
-
Nein, Exceptions werden keine geworfen, läuft alles problemlos (wenn man vom Speicherverbrauch mal absieht)