LabVIEWForum.de
Speicherverwendung --> immer kopieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Speicherverwendung --> immer kopieren (/Thread-Speicherverwendung-immer-kopieren)



Speicherverwendung --> immer kopieren - Trinitatis - 15.12.2016 17:01

Hallo zusammen,

kann mir jemand in ein paar Sätzen erklären, wozu die Funktion Anwendungssteuerung-->Speicherverwendung--> "Immer kopieren" da ist?

In der Hilfe steht "Verschiebt den Wert am Eingang an eine andere Stelle im Speicher und gibt den Wert am Ausgang aus."

Da kann ich nicht so recht was mit anfangen.


Danke



Gruß, Marko


RE: Speicherverwendung --> immer kopieren - jg - 15.12.2016 17:28

Vielleicht hilft die englische Hilfe weiter:
Zitat:Places the value of Input into a new memory location and returns the value in Output. Use this function to control the outcome of the LabVIEW compiler buffer allocation process.

Use this function when you want to control the LabVIEW compiler in order to produce a different result regarding its buffer allocations.
Gruß, Jens


RE: Speicherverwendung --> immer kopieren - Trinitatis - 15.12.2016 17:40

Ja gut - aber im Grunde steht da ja auch nur, dass die Daten im Speicher neu arrangiert werden, also an anderer Stelle neu gespeichert werden. Aber wann bzw. warum sollte für mich innerhalb der Laufzeit einer Exe dieser Wunsch aufkeimen??


Gruß, Marko


RE: Speicherverwendung --> immer kopieren - GerdW - 16.12.2016 09:14

Hallo Marko,

Zitat:Aber wann bzw. warum sollte für mich innerhalb der Laufzeit einer Exe dieser Wunsch aufkeimen?
Beispiele:
- wenn der LabVIEW-Compiler "komische" Resultate liefert, die sich durch Einsatz dieser Funktion korrigieren lassen (es gibt da so einige Beispiele im NI-Forum)
- wenn du mit DVRs arbeiten willst und eine explizite Datenkopie benötigst


RE: Speicherverwendung --> immer kopieren - Trinitatis - 16.12.2016 11:00

Hallo Jens, hallo Gerd,

danke euch beiden erstmal.

Dann habe ich noch eine Frage, die mglw. hierzu passt. Gibt es eine Möglichkeit, den Von einer Exe bzw. einem VI belegten Speicher durch Beschreieben einer Queue / Datenwertreferenz irgendwie wieder loszuweren. Wenn ich eine Queue mit 100MB beschreibe, steigt der Arbeitsspeicher, den meine EXE benötigt gemäß TaskManager entsprechend an. Wenn ich diese Queue wieder leere, bleibt der Speicherbedarf der Exe aber erhalten.
Gibt es da eine Möglichkeit?



Gruß, Marko


RE: Speicherverwendung --> immer kopieren - GerdW - 16.12.2016 11:42

Hallo Marko,

Zitat:Wenn ich eine Queue mit 100MB beschreibe, steigt der Arbeitsspeicher, den meine EXE benötigt gemäß TaskManager entsprechend an. Wenn ich diese Queue wieder leere, bleibt der Speicherbedarf der Exe aber erhalten.
Das ist der LabVIEW-interne Memorymanager: angeforderter Speicher wird nicht sofort wieder freigegeben, sondern bleibt für mögliche Weiterbenutzung weiterhin verwaltet.
Stört das bei deiner Anwendung irgendwie?

Zitat:Gibt es da eine Möglichkeit?
Spiel mal mit RequestDeallocation herum. Ist aber nur als Wunsch an den Speichermanager zu verstehen, nicht als absoluter Befehl!
Und dein Programm kann damit auch langsamer werden, da der Speichermanager bei Bedarf erneut wieder Speicher vom OS anfragen muss…


RE: Speicherverwendung --> immer kopieren - Trinitatis - 16.12.2016 12:22

(16.12.2016 11:42 )GerdW schrieb:  Stört das bei deiner Anwendung irgendwie?

Hallo Gerd,

ich sammle von 4 Kameras gleichzeitig Bilddaten ein, die ich verarbeiten und darstellen muss. Da hat sich der Speicher unlängst etwas zugeschaufelt. Ist allerdings auch noch mit 2D-Arrays programmiert, die ja bei jeder Übergabe an ein SubVI eine Kopie erstellen. Das werde ich eh noch auf Datenwertreferenzen umbauen. Aber wenn sich das ganze nun bis an die Memory-Grenze hochschaukelt, dann weiß ich nicht so recht, ob es da nicht Probleme geben kann, auch wenn der Speicher schon garnicht mehr benötigt wird.
Die Funktion RequestDeallocation habe ich schon mehrfach benutzt, habe aber noch nie irgendwelche Auswirkungen am Speicher beobachten können. Ich glaub, da ist nur ne LED drinnen, die das Flag anzeigt Smile

Aber trotzdem danke erstmal!


Gruß, Marko


RE: Speicherverwendung --> immer kopieren - jg - 16.12.2016 12:54

(16.12.2016 12:22 )Trinitatis schrieb:  Ist allerdings auch noch mit 2D-Arrays programmiert, die ja bei jeder Übergabe an ein SubVI eine Kopie erstellen.
Offiziell wird immer eine Kopie angelegt, aus Erfahrung muss ich sagen, bei geschickter Programmierung: Nein! Wenn du das 2D-Array nur als Draht in ein SubVI hineinführst, intern verarbeitest und dann wieder als Ausgang bereitstellst, den du dann im Aufrufer weiterverwendest, dann wird nicht zwingend eine Datenkopie angelegt.

Gruß, Jens


RE: Speicherverwendung --> immer kopieren - GerdW - 16.12.2016 12:58

Und dann gibt's ja immer noch die Einstellung "subroutine" für ein subVI…