' schrieb:Das mit dem Speicher kannst Du so wie im Anhang machen, habe ich aber so noch nie verwendet...., also einfach mal probieren.....
Gruß Markus
Das funktioniert nur für Speicherblöcke die LabVIEW in VIs anlegt und beibehält um sie bei einer folgenden Ausführung dieses VIs wieder zu verwenden, statt sie gleich fortzuwerfen (was Zeit kostet) und sie danach wieder neu anfragen zu müssen, (was noch mehr Zeit braucht). Damit ist auch schon deutlich dass Request Memory Deallocation in den meisten Fällen nur eines tut, nämlich die Ausführungszeit eines LabVIEW Programmes zu verlangsamen!
Die Bereiche wo das eventuel sinnvoll ist, sind sehr eingeschränkt, etwa wenn ein VI nur einmal ausgeführt wird aber dabei eine riesige Array in einem Schieberegister (das man auch programmtechnisch selber leeren kann in der letzten Iteration) oder in einem Frontpanelkontrol zurücklässt. Ansonsten Finger weg von dieser Funktion!
Memory das von externem Code gemanaged wird (.Net, ActiveX, DLLs, Treiber etc.) kann LabVIEW sowieso auf keine einzige Weise ans System zurückgeben. Dass muss schon die Entität tun die es angefordert hat. Auch auf ein Memory Leak in LabVIEW selber, also ein echtes Leak wo LabVIEW aus irgendeinem Grund die Referenz zum Speicher verloren hat bevor es ans System zurückgegeben wurde, kann durch diese Funktion NICHT freigegeben werden. Dazu müsste LabVIEW einen komplett andere interne Speicherverwaltung haben mit einer mehr oder weniger komplizierten Garbage Collection. Aber Memory Leaks in LabVIEW selber sind wirklich extrem selten.
Und nein bei .Net braucht man sich nicht einfach nicht mehr um Speicher zu kümmern. Das stimmt vielleicht innerhalb eines C# Programms noch einigermassen, solange man nur managed Interfaces verwendet aber spätestens beim Übergang zu anderen Systemen (also auch im Zusammenhang mit LabVIEW oder Aufruf von unmanaged Interfaces wie WinAPI DLLs) kann .Net nicht jedesmal magisch wissen wann LabVIEW einen Datenbuffer nicht mehr nötig hat und LabVIEW kann auch nicht immer wissen ob eine .Net Komponente diesen Buffer noch weiter verwenden will. Der erwähnte Bildbuffer ist ein guter Kandidat für so ein Problem.
Rolf Kalbermatter