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!
In meinem Programm laufen zwei Schrittketten parallel ab.
Auf guten Rat dieses Forums habe ich in meinem Programm diverse lokale Variablen durch Queues ersetzt.
Dafür habe ich mir SubVI´s erstellt, welche fürs Einlesen und fürs Auslesen,
habe diese in einem Test-VI hochgeladen
Kann es sein das dadurch meine CPU Auslasteung ca 30 min auf 95% ansteigt?
Nach ein paar Stunden kommt der Abbruch.... Speicher voll.
Vielleicht mache ich etwas grungsetzlich falsch im Umgang mit den Queues.
Es sind so ca 50 veschieden Queues-Namen die ich vergeben habe.
' schrieb:Vielleicht mache ich etwas grungsetzlich falsch im Umgang mit den Queues.
Wird eine Queue-Referenz geholt mittels des VIs "Queue holen" (also das Teil mit dem Queuenamen dran), dann muss diese Queue-Referenz auch wieder gelöscht werden (Beachte: Das Löschen der Queue-Referenz löscht nicht die Queue als solche). Zu jedem "Queue holen" muss es genau ein "Queue löschen" geben.
Wenn man die Queue-Referenz in einem Schieberegister speichert, spart man sich das "Queue holen" - und somit das "Queue löschen".
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Also, jedesmal wenn ich ein Queues anfordere, egal ob ich danch etwas einfüge(verlustbehaftet) oder das Element mit der Vorschau auslese, muss ich es danach wieder freigeben?
Werde das mal ändern.
Kann das der Grund für meine CPU-Vollauslastung sein?
' schrieb:Mögliches Missverständnis?
Demnach wäre die Antwort Nein und nicht Ja. Pro "Element einfügen" braucht's doch nicht entsprechend ein "Queue freigeben".
Ich gehe davon aus (Beachte: die Sourcen konnte ich noch nicht lesen), dass die Referenz, die für ein "In Queue einfügen" notwendig ist, durch ein "Queue holen" geholt wird.
' schrieb:Kann das der Grund für meine CPU-Vollauslastung sein?
Jede Referenz, die geöffnet wird, muss geschlossen werden. Wird sie nicht geschlossen, verbleibt sie im Speicher => erst geht die CPU-Auslastung hoch, dann läuft auch noch der Speicher über.
Ich kann doch auch nichts dazu, wenn LV ständig neue Referenzen generiert ( ). Deswegen lege ich eine einzige in ein Schieberegister in ein FGV und verwende nur die.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
05.05.2010, 18:47 (Dieser Beitrag wurde zuletzt bearbeitet: 05.05.2010 18:47 von IchSelbst.)
Wo immer "Queue anfordern", da auch ein "Queue freigeben". Und zwar genau so, wie es im ersten Bild steht: Ohne beschaltete Eingänge "Eliminieren (f)" und "Erzeugen, wenn nicht gefunden? (T)". Im zweiten Bild hast du ja auch ein Freigeben gemacht.
Was in der Hilfe steht, gilt analog auch für deinen Fall:
Zitat:Wenn die Funktion "Queue anfordern" innerhalb einer Schleife eine Referenz auf eine benannte Queue ausgibt, erzeugt LabVIEW bei jeder Iteration der Schleife eine neue Referenz auf die Queue. Wenn "Queue anfordern" in einer engen Schleife (tight loop) verwendet wird, erhöht sich die Speicherauslastung kontinuierlich, da für jede neue Referenz weitere vier Bytes hinzukommen. Diese Bytes werden automatisch beim Stopp des VIs freigegeben. Bei Applikationen mit langen Ausführungszeiten scheint LabVIEW aber Speicher zu verlieren, da die Auslastung kontinuierlich steigt. Daher sollte nach jeder Iteration in der Schleife die Funktion Queue freigeben aufgerufen werden, damit nicht unnötig viel Speicher belegt wird.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).