LabVIEWForum.de
Speicherauslastung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: Speicherauslastung (/Thread-Speicherauslastung)



Speicherauslastung - Andy.B - 11.08.2009 14:06

Hallo zusammen,

mein Problem dreht sich um die Speicherauslastung!
Ich lese Daten aus einem OPC aus und schreibe diese dann in 10 Sekundenschritten, bzw. 5 Minutenschritten in eine Textdatei. Es wird täglich eine neue Datei erzeugt und mit Daten gefüllt. Bei diesem Vorgang allerdings erhöht sich mit jedem mal Daten auslesen und schreiben die Speicherauslastung um ein paar KB, bis das Programm mit dem Fehler 2147024882 "Speicherende erreicht" abbricht.

Als Gegenmaßnahmen habe ich bereits alle Unterprozesse in SubVI's verpackt und diese mit der Funktion "Speicherfreigabe anfordern" bestückt, es hat jedoch alles bisher nichts gebracht. Eigentlich sollte doch LabVIEW den zugewiesenen Speicher selbt verwalten und bei nichtgebrauch auch wieder feigeben?!

Hat irgendmemand eine Idee zu diesem Problem, ich wäre sehr glücklich über eine Hilfestellung! Big Grin


Speicherauslastung - HAL - 11.08.2009 14:10

Hi Andy,

NI-Support schon mal angerufen?

Gruss HAL


Speicherauslastung - jg - 11.08.2009 14:11

Wie gehts du beim Datei öffnen/lesen/schreiben vor?

Sourcecode wäre nicht schlecht zur weiteren Hilfe...

Ich tippe mal: Du verwendest nur Read und Write VIs, mit Pfad-Angabe am Anschluß, aber du schließt die Files nicht nach den Lese-/Schreibvorgängen mit eine Close File!?

Dann bleiben da lauter offene File-Handles übrig, die dir den Speicher vollmüllen.

Gruß, Jens


Speicherauslastung - Andy.B - 11.08.2009 14:38

... das habe ich zuerst in der Tat nicht, allerdings bin ich dann auch daruf gekommen. Ich erstelle die Datei wie von dir beschrieben, dann gebe ich die Referenz weiter, dann gehts ab in ein SubVI und dort wird die Datei nach Beendigung der Schleife (Mitternacht) geschlossen.

Daran sollte es also nicht liegen. Ich lade mal das VI hoch, dauert allerdings noch ein wenig, muss es erst vom Firmennetzwerk runterladen, wo das Teil gerade läuft.

Schon mal vielen Dank für die Hilfe!
Andy


Speicherauslastung - Andy.B - 11.08.2009 15:24

Hallo Jens,

ich habe dir mal das VI mit den SubVI's hochgeladen. Das VI beinhaltet ein ActivX Control, weiß nicht ob das bei dir so läuft, aber das Blockdiagramm kannst du dir mit Sicherheit ansehen.

Über eine Antwort würde ich mich freuen,
Gruß Andy

Lv86_img


Speicherauslastung - jg - 11.08.2009 20:46

Erst mal generelle Kritik:

Schäm dich, einen solchen Spaghetti-Code hier hochzuladen.Noe
Schon mal was vom LV-Style-Guide gehört? Von links nach rechts programmieren? Dabei hast du LabVIEW 8.6, und bei deinen VIs bringt das automatische Aufräumtool (Strg-U) schon eine große Verbesserung.

Dann mal zur möglichen Fehlerquelle: Du öffnest andauernd neue Referenzen zu Objekten deiner ActiveX-Klasse, ohne diese, nachdem du sie nicht mehr benötigst, mit einem Close-Befehl zu schließen.
Das andauernde Fileposition-VI brauchst du auch nicht, schließlich hältst du den File dauernd per Refnum offen, und somit steht der File-Pointer immer an der Position, an der er nach der letzten Schreib-Operation aufgehört hat, zu schreiben.

File schließen würde ich nach Beendigung der Schleife machen, nicht innerhalb der Schleife, du erzeugst nur einen unnötigen Schreibfehler durch Nichtbeachtung des Datenflußes (Erst schließt du File, dann kommt noch eine SchreiboperationNoe)

So, 2 deiner Sub-VIs habe ich mal umgebaut, das mit den Referenzen schließen musst du dann noch im Main-VI und den beiden anderen nachziehen:
Lv86_img
[attachment=20401]
[attachment=20402]

Aber das mach mal selber.

Gruß, Jens


Speicherauslastung - Andy.B - 12.08.2009 06:56

Hallo Jens,

harsche, aber ich denke mal verdiente Kritik. Ich bin nicht der geübte LV anwender und kämpfe schon mal mit der Übersicht in meinen eigenen VI's. Die von dir umgebauten VI's sehen da schon ganz anders aus. Ich danke dir schon mal dafür und bau das jetzt bei mir ein. Mal sehen, ob es dann was an meinem Speicherauslastungsproblem ändern wird.

Schöne Grüße und danke nochmals für die Tipps,
Andy


Speicherauslastung - jg - 12.08.2009 07:59

' schrieb:harsche, aber ich denke mal verdiente Kritik.
Da habe ich hier schon härter kritisiert...
' schrieb:Ich bin nicht der geübte LV anwender und kämpfe schon mal mit der Übersicht in meinen eigenen VI's.
Trotzdem hätte ich von jemand mit laut Profil Erfahrung seit 2003 etwas mehr erwartet...
Außerdem gibt's ja neuerding "Strg-U":hehe:
' schrieb:Die von dir umgebauten VI's sehen da schon ganz anders aus.
Dank Aufräumtool und etwas manueller Nachbearbeitung...

Gruß, Jens

P.S.: Und nicht vergessen, jede Refnum schließen, aber erst, wenn du sie nicht mehr brauchst!


Speicherauslastung - Andy.B - 13.08.2009 14:54

Hallo Jens,

mittlerweile läuft es bezüglich der Speicherauslastung prima, der Wert bleibt im Taskmanager konstant. Dank dir habe ich jetzt auch ein "aufgeräumtes VI" und ich werde auch nur noch solche hier hoch laden.
Allerdings hätte ich noch eine weitere Frage die Problematik liegt allerdings woanders. (Sollte ich dann ein neues Thema eröffnen??)
Es geht um die Einhaltung des Zeitintervalls für die Abfragung des OPC Servers. Mir läuft das schon nach kurzer Zeit davon, interessanterweise nicht reproduzierbar gleich, sondern immer anders. Wie du gesehen hast versuche ich das mit einer zeitgesteuerten Schleife, allerdings mit mäßigem Erfolg.
Gibt es hierfür elegantere Standardlösungen, das Problem müsste ja eigentlich oft auftauchen?

Schöne Grüße nochmals und Danke für die Hilfe bezüglich des Speichers.
Andy