LabVIEWForum.de - Speicher Leck finden

LabVIEWForum.de

Normale Version: Speicher Leck finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen

ich habe folgendes Problem

ich habe seit ich ein Vi von Wandgröße in ein schickes Vi mit Producer event Struktur und consumer Schleifchen umgebaut habe, im Projekt ein Speicherleck ... evtl auch schon vorher aber unbemerkt ....

wenn ich das vi alleine laufen lasse geht das Problemlos ist aber sinnlos in Verbindung der anderen Vis ( einlesen auf RS232 Schnittstelle und ein Anzeige Vi) gibt es aber ein Problem das innerhalb von 5-10 Minuten Labview 1,5GB speicher braucht...

zur Information
Die Vis kommunizieren untereinander entweder mittels Notifier oder Globaler Variable...


Mein Problem nun ist: Wie finde ich das Leck....

ich habs schon mit ..->Extras->Profil->"Performance and Memory" versucht hab aber nichts auffälliges feststellen können.
mit dem "LabVIEW Desktop Execution Trace Toolkit" hab ich auch schon experimentiert .. ohne erfolg ... wenn ich auf auf eine Stelle klicke an Der Speicher alloziiert wird zeigt mir Labview entweder ein einfaches Wire an bei dem nix passiert oder "Error highlighting object - Error Code: 1057" ...

Seltsamerweise scheine ich wenn das ganze als EXe compiliert ist ein kleineres Leck zu haben ... der Speicherverbrauch der EXE steig zwar aber relativ langsam... nach 1,5 h von 170MB auf 306MB ...

hat noch jemand Vorschläge was zu überprüfen ist?
Ich kann die Vi's leider nicht posten .. erstens zu umfangreich und 2. Firmenpolitik....

T


edit: btw wie führe ich Qs und Notifier durch while schleifen ?
[attachment=32385]
Was mir in deinem Screenshot fehlt, sind die Release-VIs. Zu jedem Obtain Notifier/Queue gehört ein Release Notifier/Queue.

Alternativ: Nur 1x dieselbe Queue/Notifier anlegen, und dann über z.B. FGVs an die anderen VIs verteilen.

Gruß, Jnes
(18.02.2011 16:17 )jg schrieb: [ -> ]Was mir in deinem Screenshot fehlt, sind die Release-VIs. Zu jedem Obtain Notifier/Queue gehört ein Release Notifier/Queue.

Alternativ: Nur 1x dieselbe Queue/Notifier anlegen, und dann über z.B. FGVs an die anderen VIs verteilen.

Gruß, Jnes

Stimmt die habe ich vergessen ...

In meinem Projekt habe ich die aber drinn... mir gibgs nur um das ein Beispiel wie ich das Wiere durch die schleife führe.. mit Tunnel oder Schieberegister...

ich habe momentan bei mir alles mit Schieberegistern gemacht...

T
Das sollte egal sein. Ist eine Referenz.

Weiter gerne gemachte Fehler, die zu Speicherlecks führen: Nicht geschlossene Referenzen. Sehr über bei z.B. ActiveX oder .NET Sachen.

Gruß, Jens
Zeigt denn "Performance and Memory" irgendwelche VIs an die viel Speicher brauchen?
Wie verhalten sich die Queuesizes? Werden die größer?
Hast du mal fixed sized Queues mit preallocate ausprobiert? Also beim ersten Öffenen komplett befüllen und dann flushen.
Auch sonstige Variablen/SRs/FGVs beim Programmstart einmalig mit erwarteter maximal Größe füllen und wieder leeren (kein Request deallocate danach verwenden).
Irgendwelche "fancy"-Sachen drin (z.B. XControls)?
Bei allen VIs debugging ausschalten (Exe ohne debugflag builden reicht dazu wohl nicht).
Hallo

danke für die Hilfe.

ich hab das Leck gefunden und gestopft ... sowas dummes kann auch nur mir passieren ...

[attachment=32460]



T
Au ja, der Fehler ist gut Wink Mit 50 ms immer wieder ein Event registrieren. Lol
Gruß, Jens
Referenz-URLs