LabVIEWForum.de
Speicher läuft in Statemachine voll (großes Array...) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Speicher läuft in Statemachine voll (großes Array...) (/Thread-Speicher-laeuft-in-Statemachine-voll-grosses-Array)



Speicher läuft in Statemachine voll (großes Array...) - Peter04 - 26.11.2013 14:52

Hallo,

ich hab aktuell das Problem, dass in einer Statemachine der Arbeitsspeicher vom Rechner voll läuft. Das schaue ich mir mit dem Win TaskManager an.
Ich hab mal ein kleines Beispiel angehangen. Da wird zunächst der Speicher mit einem immer größeren Array bewußt vollgepackt. Aber wenn ich auf löschen gehe habe ich eigentlich erwartet, nachdem ein leeres Array übergeben wurde, dass der Speicher wieder leer wird. Wird er aber nicht. Was mach ich denn da falsch, bzw. wie bekomme ich den Speicher effizient leerer?

Gruß
Peter

LV2011
[attachment=47457]


RE: Speicher läuft in Statemachine voll (großes Array...) - GerdW - 26.11.2013 15:32

Hallo Peter,

erstmal habe ich die Statemachine aufgeräumt...

Dann zum Problem:
Der Taskmanager zeigt den Speicher an, den LabVIEW (als IDE) reserviert hat. Dies ist nicht der Speicher, den dein VI aktuell benötigt...
LabVIEW holt sich Speicher vom OS und verwaltet diesen selbst. Allzu viele Eingriffmöglichkeiten hat man da nicht außer evtl. frommen Wünschen...


RE: Speicher läuft in Statemachine voll (großes Array...) - Peter04 - 26.11.2013 16:14

Hallo Gerd,

danke für die Info. Dein Aufräumarbei (case Struktur entfernen) macht natürlich Sinn.
Das Beispile ist ja nur ein Minimalbeispiel. Normal läuft das Array erstellen auch im subvi und nach Weiterverarbeitung habe ich auch dieses "Speicher freigeben" vi angehängt. Hab aber wohl das "Wünschen" vergessen, denn da hat sich nix geändert. Aus dem größeren Projekt hab ich auch ne exe erstellt und da kann ich (im Taskmanager) schön zusehen, wie der RAM Verbrauch von 2 auf ca. 45% ansteigt und dann stürzt die exe ab. Meist ohne Fehlermeldung.
Also muss ich wohl stärker die Daumen drücken oder Schauen, ob ich das vielleicht ganz anders aufbauen kann.

Gruß
Peter


RE: Speicher läuft in Statemachine voll (großes Array...) - GerdW - 26.11.2013 16:24

Hallo Peter,

statt auf den Speicherverbrauch zu schauen, solltest du eher das Erstellen von Arrays aus 1000×1000 Strings (variabler Länge!) überdenken...

- Das Erzeugen unlimitierter (großer) Arrays ist immer schlecht bzgl. Speicherhandling...
- Das Erzeugen großer Stringarrays ist noch schlechter, da hier eine wesentlich kompliziertere Speicherstruktur dahintersteht (im Vergleich mit fixen Datentypen wie DBL-Zahlen)...

Merke: Wann immer du BuildArray in deinen Programmen nutzt, musst du mit Speicherproblemen rechnen.
Und diese kann man nicht abfangen, entsprechende Wünsche werden von NI bisher nicht umgesetzt... Sad


RE: Speicher läuft in Statemachine voll (großes Array...) - Peter04 - 28.11.2013 16:26

Hello again,

erstmal Danke für die bisherigen Tipps.

Ich hätte da aber noch mal ne Frage. Ich hab mir mal die Hilfe von NI bzgl. "Konfigurieren von vi-Aufrufen" angeschaut:
http://zone.ni.com/reference/de-XX/help/371361H-0113/lvhowto/configuringcalls/
Bisher hab ich mich da nie drum gekümmert und alle subs mit dem Main geladen.

Dei Hilfe sagt "Beim ersten Aufruf laden und halten [...] wird das SubVI erst bei Bedarf geladen und nach dem Abschluss der Operation aus dem Speicher entfernt." Das hört sich ja hilfreich an.
Und "Bei jedem Aufruf neu laden [...] wird nicht garantiert, dass das SubVI auch nach dem Aufruf im Speicher bleibt.

Also nach meinem Verständnis sollte doch eigentlich "bei jedem Aufruf neu laden" weniger Speicher brauchen, wenn die subs mit dem großen Array immer neu geladen werden. Und bei "laden und halten" wird es aus dem Speicher entfernt!?

Übersetzungsfehler oder Verständnisfehler?

Gruß
Peter

P.S.: @ GerdW: in der Praxis habe ich ein ca. 10000x2 String Array erstellt mit BuildArray


RE: Speicher läuft in Statemachine voll (großes Array...) - D_Sev - 30.11.2013 22:42

Vielleicht hilft das ?