Sorry, ich will das Thema nicht pushen. Vielleicht hat aber jemand ein paar Ratschläge zu den Resultaten bisher..
Mit der memcheck
Unit bekomme ich am Ende das Resultat "kein Leak gefunden". Meine Applikation startet mit 80 MB Speicherverbrauch (Overhead der externen Dependencies, nicht meine Schuld) und hat nach etwas Arbeit locker 400-500 MB im Taskmanager für sich veranschlagt. Die Daten bekomme ich schubweise und nach jeder Bearbeitung (bestehend aus einigen
COM-Aufrufen hauptsächlich) ist der Speicherverbrauch signifikant höher.
FastMM bekomme ich nicht dazu, mir Hinweise/Logs in irgendeiner Art zu generieren. Ich erhalte keine Fehler mit FastMM als erster
Unit, aber Leaks oder irgendwas als Report gibt es halt nicht. Die Include-Datei ist jedoch imo korrekt angepasst.
MemProof meldet mir Leaks, allerdings "nur" SysStrings. Ich denke nicht, dass ich mit Dutzenden/Hunderten von Strings (Länge entweder exakt 6 Zeichen oder grob 20, das Problem mit den VarArrays tritt an zwei Stellen auf) auf Dutzende/Hunderte von MBs an Speicherverbrauch komme? Der Stack zu den Leaks ist wie o.a. vor meiner Funktion:
System.pas:WStrFromPWCharLen
Variants.pas:VarFromWStr
... mein Kram ...
Wenn ich mir den Inhalt der Strings/Leaks anschaue, dann erkenne ich Daten, die ich als PSafeArray an
COM übergeben musste. Dafür habe ich VarArrayCreate() oder VarArrayFromStrings() verwendet und das Ergebnis in ein PSafeArray gecastet. Ich will nun keineswegs Fehler auf meiner Seite oder sogar auf der
COM-Seite (ein .Net Framework) ausschliessen. Ich werde sicherlich etwas sehr dummes machen - nur bin ich langsam am Ende mit Ideen.
Inzwischen falle ich schon zu einem try/finally/FreeAndNil oder Finalize um fast jedes Statement zurück.
Gibt es bekannte dumme Dinge die bei Varianten/VarArrays/PSafeArrays passieren können?
Danke für jeden Hinweis,
Ben