LabVIEWForum.de
ActiveX und Speicherüberlauf - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: ActiveX und Speicherüberlauf (/Thread-ActiveX-und-Speicherueberlauf)



ActiveX und Speicherüberlauf - steptronic - 20.04.2012 14:58

Hallo,

für eine optische Inspektion mit dem Halcon-Systems nutze ich die ActiveX-Schnittstelle.
Das funktioniert auch soweit, jedoch wird mit jeder Ausführung der Arbeitsspeicher immer voller, bis irgendwann der Fehler "Nicht genügend Speicher zum Abschließen der Operation." kommt. Die Anzahl der Handles bleibt aber gleich. In meinem VI werden nur zwei Referenzen geöffnet und auch wieder geschlossen.

Ich hab zuvor noch nie mit ActiveX-Objekten gearbeitet und kenn mich da auch nicht so gut aus.
Das Inspektionsprogramm an sich habe ich in der Halcon-Umgebung getestet und da läuft es einwandfrei.
Ich weiß nicht, woher der Speicherüberlauf kommen soll.
Wäre super wenn mir jemand einen Tipp geben könnte.

[attachment=39540]

LV2010 SP1


RE: ActiveX und Speicherüberlauf - rolfk - 22.04.2012 08:50

(20.04.2012 14:58 )steptronic schrieb:  Hallo,

für eine optische Inspektion mit dem Halcon-Systems nutze ich die ActiveX-Schnittstelle.
Das funktioniert auch soweit, jedoch wird mit jeder Ausführung der Arbeitsspeicher immer voller, bis irgendwann der Fehler "Nicht genügend Speicher zum Abschließen der Operation." kommt. Die Anzahl der Handles bleibt aber gleich. In meinem VI werden nur zwei Referenzen geöffnet und auch wieder geschlossen.

Ich hab zuvor noch nie mit ActiveX-Objekten gearbeitet und kenn mich da auch nicht so gut aus.
Das Inspektionsprogramm an sich habe ich in der Halcon-Umgebung getestet und da läuft es einwandfrei.
Ich weiß nicht, woher der Speicherüberlauf kommen soll.
Wäre super wenn mir jemand einen Tipp geben könnte.



LV2010 SP1

Nun am VI selber kann ich auf die Schnelle keinen Fehler entdecken. Das lässt eigentlich nur zwei Schlussfolgerungen zu. Entweder hat LabVIEW Probleme mit der TypeLibrary dieser Komponente und verheddert sich irgendwo mit Resourcenmanagement dafür, oder und das ist aus meiner Erfahrung viel wahrscheinlicher, die ActiveX Komponente vergisst selber um intern geöffnete Resourcen auch wieder zu schliessen wenn sie selber abgeschlossen wird.


RE: ActiveX und Speicherüberlauf - steptronic - 23.04.2012 06:27

(22.04.2012 08:50 )rolfk schrieb:  Nun am VI selber kann ich auf die Schnelle keinen Fehler entdecken. Das lässt eigentlich nur zwei Schlussfolgerungen zu. Entweder hat LabVIEW Probleme mit der TypeLibrary dieser Komponente und verheddert sich irgendwo mit Resourcenmanagement dafür, oder und das ist aus meiner Erfahrung viel wahrscheinlicher, die ActiveX Komponente vergisst selber um intern geöffnete Resourcen auch wieder zu schliessen wenn sie selber abgeschlossen wird.

Was heißt das dann für mich? Kann ich da irgendwas tun, dass Resourcen wieder geschlossen werden oder bin ich hilflos der ActiveX-Komponente ausgeliefert?


RE: ActiveX und Speicherüberlauf - rolfk - 23.04.2012 07:44

(23.04.2012 06:27 )steptronic schrieb:  
(22.04.2012 08:50 )rolfk schrieb:  Nun am VI selber kann ich auf die Schnelle keinen Fehler entdecken. Das lässt eigentlich nur zwei Schlussfolgerungen zu. Entweder hat LabVIEW Probleme mit der TypeLibrary dieser Komponente und verheddert sich irgendwo mit Resourcenmanagement dafür, oder und das ist aus meiner Erfahrung viel wahrscheinlicher, die ActiveX Komponente vergisst selber um intern geöffnete Resourcen auch wieder zu schliessen wenn sie selber abgeschlossen wird.

Was heißt das dann für mich? Kann ich da irgendwas tun, dass Resourcen wieder geschlossen werden oder bin ich hilflos der ActiveX-Komponente ausgeliefert?

Bei solchen Dingen bist Du hilflos dem Entwickler dieser Komponente ausgeliefert. Es könnte sicher hilfreich sein um mit diesem Entwickler Kontakt aufzunehmen. Vielleicht ist das Problem ja bekannt und hat man schon eine neue Version. Möglicherweise wird auch jegliche Verantwortung abgeschoben, mit der Begründung dass die Komponente schon Jahre ohne irgendwelche Reklamationen eingesetzt wird. Meist würde das aber bedeuten, dass sie eben von niemanden zum Laufen gebracht wurde und sich nur niemand davon an den Hersteller gewendet hat.

Eine gute Idee ist es in jedem Fall um um ein Beispiel in einer anderen Sprache zu fragen. Etwa Visual Basic oder C(++). Das sollte dann natürlich schon dasselbe tun was Du in LabVIEW zu tun versuchst und natürlich auch mehr als einmal bevor es beendet wird. Quick Run-once Beispiele sind nicht geeignet um zu beweisen dass eine Komponente keine Memoryleaks hat.