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!
mit dem angehängten SubVI lese ich einen Teil der Desktops aus. Dies geschieht mit den System .NET Klassen (system.drawing) (den Programmteil habe ich im Netz gefunden). Soweit ich das sehe, werden am Ende alle Objekte geleert und alle Referenzen geschlossen. Nur das Bild wird ausgegeben (und 4 mal I32 und ein Error Cluster). Packe ich dieses SubVI in eine Schleife (und lasse mir das Bild anzeigen über „Serialisierte Pixmap zeichnen“ und „2D-Bild“), läuft langsam der Arbeitsspeicher voll, bis zur Fehlermeldung: „Nicht genügend Speicher zum Abschließen dieser Operation.“ Ich verstehe nicht so ganz warum. Das Bild sollte doch in jedem Schleifendurchlauf durch das neue Bild ersetzt werden. Ist vielleicht doch im SubVI irgendein Objekt nicht richtig geleert worden und füllt so bei jedem Aufruf den Arbeitsspeicher mehr und mehr?
Die LabView Hilfe hat mir nicht wirklich weiter geholfen: Ich sehe zwar im „Profil – Leistung und Speicher → Speicherauslastung“-Fenster das das SubVI viel Speicher braucht (das ist nun mal so bei Bildern), ich sehe aber nicht ob dieser wieder frei gegeben wird. Leider zeigt mir auch dieses Fenster nicht wie groß die .NET-Objekte sind und ob deren Speicher am Ende jedes Aufrufs geleert ist.
Hab auch schon im Netz nach den .NET-Objekten (in C#, VB, usw.) gesucht. Hier ist der Fehler auch bekannt. Es hängt immer daran, dass die Objekte nicht richtig geleert werden oder die Referenzen nicht geschlossen werden. Soweit ich das erkennen kann, wird dies im SubVI aber richtig gemacht.
Zu „Speicher läuft voll“ und Ähnlichen hab ich hier (und im Netz) einiges gefunden aber eben leider nicht im Zusammen mit .NET-Objekten. Ich hoffe daher einer von Euch kann mir hier weiter helfen.
Das VI sieht gut aus, alle Refnums werden geschlossen.
Sowohl im Desktop Trace Execution Toolkit als auch im "Profile Performance und Memory" Fenster verhält sich dein VI, auch als Sub-VI in einer While-Schleife, vollkommen unauffällig und ohne Speicher-Anstieg.
Zeig mal dein Test-VI, in dem du einen Speicher-Anstieg detektierst.
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!
im Anhang das Test-Haupt-VI.
In 5 Minuten werden 4 GB Arbeitsspeicher gefüllt. Beobachten tue ich dies mit dem Windows Task-Manager bis eben die Fehlermeldung "Nicht genügend Speicher zum Abschließen dieser Operation" erscheint und das VI beendet wird.
Ich kann deinen Speicheranstieg nachstellen, aber wo genau der herkommt, weiß ich leider auch nicht. Dazu verstehe ich ebenfalls zu wenig von den verwendeten .NET-Aufrufen. Referenz-mäßig sieht alles gut aus, aber irgendwo wird wohl doch Speicher nicht wieder freigegeben.