LabVIEWForum.de
Tabelle: Speicher freigeben? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Tabelle: Speicher freigeben? (/Thread-Tabelle-Speicher-freigeben)



Tabelle: Speicher freigeben? - danielsan - 19.10.2009 15:34

Hallo Leute,
folgendes Problem:

Mein Programm ermöglicht es, Datensätze aus einer SQL-Datenbank zu lesen, anzuzeigen und nach Excel zu speichern.
Die Daten werden als 2D-Array ausgelesen und in ein Tabellenelement (Anzeigeelement) zur Anzeige geschrieben.
Bei einer neuen Anfrage wird die Tabelle zunächst mit einem leeren Array beschrieben, bevor die entsprechenden Daten kommen. Das mache ich größtenteils über Referenzen und Eigenschaftsknoten mit "Wert".
Liest man jetzt eine gewisse Anzahl an Datensätzen ein, wird eine nicht unerhebliche Menge an Arbeitsspeicher reserviert (z.b. 500MB bei 70000 Zeilen). Wenn eine neue Anfrage stattfindet, die z.B. nur eine Zeile ergibt, wird der Speicher aber nicht wieder freigegeben. (höchstens 50 MB). Auch nach Beenden des Programms und sogar nach Schließen des LV-Projektes ist der Speicher noch belegt. Eine Freigabe erfolgt erst nach vollständiger Beendigung von LV.
Lässt sich das irgendwie optimieren? Ich möchte die Anzeige sowieso langfristig auf 5000 Zeilen begrenzen, finde es aber seltsam, dass der Speicher nicht wieder freigegebn wird. Hängt das mit der Referenz auf die Tabelle zusammen (wird vor Beenden des programms aber geschlossen)

Gruß,
Daniel


Tabelle: Speicher freigeben? - IchSelbst - 19.10.2009 17:44

' schrieb:Eine Freigabe erfolgt erst nach vollständiger Beendigung von LV.
Das sieht schon sehr so aus, als ob da irgendwo ein Handle noch offen ist.

Sowas passiert, wenn man zu einen Open (für was auch immer) keinen korrespondieren Close macht. Kann es sein, dass da irgendwo ein Close fehlt?


Tabelle: Speicher freigeben? - danielsan - 20.10.2009 07:30

Kannst Du mal bitte erklären, was Du mit open meinst? Ein Beispiel vielleicht?

Klar die Tabelle beschreibe ich mit referenz und Eigenschaftsknoten. Diese Referenz schließe ich aber am Programmende wieder.


Tabelle: Speicher freigeben? - IchSelbst - 20.10.2009 10:30

' schrieb:Kannst Du mal bitte erklären, was Du mit open meinst? Ein Beispiel vielleicht?
Beispiel ist gerade schlecht, hab hier kein LV.

Mit Open meine ich alles, was eine Referenz, einen Handle etc. generiert. Jeder FileOpen z.B. erzeugt einen File-Handle, der mit FileClose geschlossen werden muss.

Auch bei der Datenbank kann ich mir gut vorstellen, dass da - möglicherweise sogar ständig - Handle/Referenzen erzeugt werden - und die müssen halt wieder geschlossen werden.

Wie ist denn das mit den 500MB, die für 70000 Zeilen reserviert werden. Hast du mal eine Daumenpeilung gemacht, ob das realistisch ist? Wie lange dauert es denn, bis die 70000 Zeilen eingelesen sind?