Hallo,
ich habe ein Problem mit einer ADO-Datenanbindung, und zwar habe ich ein memory-leak
Um auf eine externe Datenquelle zuzugreifen verwende ich ADO um einen SQL-Befehl abzusetzen (LS:DO ist mir zu langsam)
Hierzu gibt es im adoResultset die Methode getRows, welche mir ein 2-D Array mit den Datensätzen aus der SQL-Tabelle liefert:
http://msdn.microsoft.com/en-us/library/ms675120%28VS.85%29.aspxIch lese mir dazu immer 32 Zeilen in so ein Array mittels
bufferAr = adoResultSet.GetRows(32)
ein und verarbeite dies dann. Nun habe ich das Problem, dass der Speicher dieses Arrays (das ja "aus einer anderen Welt" stammt) nicht mehr freigegeben wird. D.h. der Notes-Prozess braucht nach jedem Durchlauf mehr Ram. Dabei ist mir aufgefallen, dass hier scheinbar das Kopieren des Arrays "schuld" ist.
ein
Call adoResultSet.GetRows(32)
ohne Verarbeitung der Rückgabe verursacht nämlich kein Speicherleck
Weise ich die Rückgabe irgendwas zu, so dass ich damit weiterarbeiten könnte, geht der Speicher verloren
ein anschließendes Delete/Erase/ =null/redim auf das BufferAr bringt NICHTS
Mein momentaner WürgAround ist , dass ich anstatt getRows die Methode getString verwende, welche mir einen String mit Trennzeichen der aktuellen Zeile liefert. Den String splitte ich dann an den Trennzeichen und baue mir umständlich ein "BufferAr" wie es auch GetRows liefern würde.
Evtl hat noch wer einen Tipp für mich.
Gruß
Roland