LabVIEWForum.de
Speicher läuft voll mittels .NET-Objekt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: Speicher läuft voll mittels .NET-Objekt (/Thread-Speicher-laeuft-voll-mittels-NET-Objekt)



Speicher läuft voll mittels .NET-Objekt - mc_schleck - 14.05.2018 11:06

Hallo Leute,

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.

Danke.

Viele Grüße,
Andi


RE: Speicher läuft voll mittels .NET-Objekt - jg - 14.05.2018 13:03

Ich kann deine Probleme nicht nachvollziehen.

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


RE: Speicher läuft voll mittels .NET-Objekt - mc_schleck - 14.05.2018 15:02

Hallo Jens,

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.

Grüße,
Andi


RE: Speicher läuft voll mittels .NET-Objekt - jg - 14.05.2018 16:02

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.

Aber zum Glück findet Google andere Lösungen:

https://forums.ni.com/t5/Example-Programs/Screenshot-in-NET-with-LabVIEW/ta-p/3497914

oder mglw. noch besser:
https://forums.ni.com/t5/Example-Programs/Continuous-Screen-Capture-in-LabVIEW/ta-p/3518680

Ich hab's mal ganz kurz angetestet, Speicher sah stabil aus.

Gruß, Jens


RE: Speicher läuft voll mittels .NET-Objekt - mc_schleck - 15.05.2018 08:48

Hallo Jens,

Der zweite Link ist ein Volltreffer! Das kann ich für mein Projekt nutzen. Big Grin
Danke.


Grüße,
Andi