Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
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??
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
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?
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…
(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
(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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!