LabVIEWForum.de
Wie Speicherverbrauch minimieren? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Wie Speicherverbrauch minimieren? (/Thread-Wie-Speicherverbrauch-minimieren)

Seiten: 1 2


Wie Speicherverbrauch minimieren? - Matze - 15.07.2010 13:53

Hallo zusammen,

ich habe folgendes VI, das fortlaufend durchlaufen wird.

[attachment=27863]

Ich suche aus mehreren Signalen 2 bestimmte damit heraus.
Der Speicherverbrauch ist laut LabVIEW-Speichermonitor (oder wie sich das nennt) gigantisch. Nach wenigen Sekunden ergibt sich das folgende Bild (Sample-Rate = 1,6 kHz):

[attachment=27864]

Was verursacht diesen hohen Speicherverbrauch? Laut Windows-Taskmanager sind es nur wenige MB, wobei man sich auf den nicht verlassen kann.
Die Daten werden doch nach der Ausführung des VIs wieder aus dem Speicher entfernt (= lokale Variablen), dachte ich.

Gibt es irgendwo Tipps/Tutorials, die man bzgl. Speichermanagement oder auch Performance beachten sollte?
Also häufig verwendete Konstrukte (Werte in Array einfügen, Messwerte vearbeiten, ...), evtl. mit Negativ- und Positivbeispiel?

Wenn man z.B. sämtliche Variablen als Referenz übergeben könnte (ohne umständliches "Referenz erstellen" und diese Inline-Elementstruktur etc), wäre mir vielleicht schon geholfen, aber sicher bin ich mir nicht.


Wie Speicherverbrauch minimieren? - abrissbirne - 15.07.2010 14:03

In der LV Hilfe gibt es jede Menge zu diesem Thema. Was mir direkt ins Auge gefallen ist, ist der Indicator Kraft-Weg-Signal. Ziehe den mal aus deinem Case heraus (ist sonst noch irgendeine Struktur die auf dem Bild nicht zu sehen ist?). Dadurch vermeidest du eine Kopie des Wertes.


Wie Speicherverbrauch minimieren? - RMR - 15.07.2010 14:08

Hi,

wenn ich es so richtig im Hinterkopf habe, legt LV bei Zugiffen auf ein Array eine Kopie des jeweiligen Arrays an. Somit wird sich das wohl kaum ändern lassen. Wie groß sind denn deine Arrays?

Bin aber sehr gespannt was die Gurus hier von sich geben.

Keep on rockin, RMR


Wie Speicherverbrauch minimieren? - abrissbirne - 15.07.2010 14:15

' schrieb:Hi,

wenn ich es so richtig im Hinterkopf habe, legt LV bei Zugiffen auf ein Array eine Kopie des jeweiligen Arrays an. Somit wird sich das wohl kaum ändern lassen. Wie groß sind denn deine Arrays?

Bin aber sehr gespannt was die Gurus hier von sich geben.

Keep on rockin, RMR
Das ist so nicht richtig.
Wenn dein Array Control und dein Array Indicator auf der Blockdiagram Route liegen, wird der Speicher des Aufrufenden VIs mitverwandt. Es wird keine explizite Kopie erstellt.


Wie Speicherverbrauch minimieren? - Matze - 15.07.2010 14:17

Hallo ihr beiden!

@abrissbirne: Stimmt, bei jedem Eingang einer Case-Struktur legt LabVIEW vermutlich eine Kopie der Daten an. Dann ziehe ich sämtliche Daten in die Case-Struktur hinein und lasse nur noch den Fehlereingang draußen.

@RMR: Puh, gute Frage. Es ist ein recht umfangreiches Cluster und das enthält 2 Messreihen, die über paar Sekunden aktuell mit 1,6 kHz gefüllt werden. Das ist aber eher ein Test, um solche Speicherproblemchen zu finden.


Wie Speicherverbrauch minimieren? - abrissbirne - 15.07.2010 14:24

' schrieb:Hallo ihr beiden!

@abrissbirne: Stimmt, bei jedem Eingang einer Case-Struktur legt LabVIEW vermutlich eine Kopie der Daten an. Dann ziehe ich sämtliche Daten in die Case-Struktur hinein und lasse nur noch den Fehlereingang draußen.
Und das ist genau falsch! Du musst alle Controls und Indicators ausßerhalb der Casestruktur auf die Blockdiagram Route legen (siehe vorheriger Post).


Wie Speicherverbrauch minimieren? - Matze - 15.07.2010 14:31

Die, die ich in der Case-Struktur nicht benötige ja.
Aber auch die, auf die ich innerhalb der case-Struktur zugreifen möchte?

Nehmen wir das folgende VI. Ist hier der untere Weg besser?

[attachment=27870]


Wie Speicherverbrauch minimieren? - M Nussbaumer - 15.07.2010 14:33

Ja, nur schon weil du im Fehlerfall den Wert des Eingangs anstatt eines Default-Wertes weitergibst (betrachte ich als VorteilWink)


Wie Speicherverbrauch minimieren? - Matze - 15.07.2010 14:40

Hm ok, dann ziehe ich das in meiner VI-Sammlung mal alles da raus. Unsure


Wie Speicherverbrauch minimieren? - abrissbirne - 15.07.2010 14:43

' schrieb:Nehmen wir das folgende VI. Ist hier der untere Weg besser?
[attachment=56615:vi.PNG]
Jup, dadurch wird der Speicher des Aufrufenden VIs verwandt. Wenn du nun Arrayoperationen anwendest machst du es ganauso, nimmst für die Operationen die Inplace Elementstruktur und hast es optimal (Speicherbedarf) gelöst.