Speicherverlust im Webcam-Code [geschlossen]

9

Ok, ich habe versucht, etwas Bestimmtes mit dem Video-Feed von einer Webcam zu tun. Ich habe ein Mikroskop Lumenera Infinity 2, von dem ich versuche, Feed zu ziehen, und möchte in der Lage sein, den Feed so anzupassen, wie er kommt. Da ich mit Video Source Player keinen Weg fand, dies zu tun, entschied ich mich stattdessen Ziehe jeden Frame (max. 15 fps für die Kamera) als Bitmap, damit ich dort meine Änderungen vornehmen kann.

Das Problem ist: Ich habe ein großes Speicherleck. Wenn ich das Video nur mit dem videoSourcePlayer starte, schwebt es um etwa 30 MB. Wenn ich die Frames als Bitmaps ziehe, bricht es in wenigen Sekunden 1 Gig Speicher ab.

Was vermisse ich hier? Ich dachte mir, dass die automatische Speicherbereinigung die alten Frames aufheben würde, wenn sie nicht mehr zugänglich wären. Sollte ich versuchen, Garbage Collection auf Bitmap zu erzwingen? Oder ist es etwas völlig anderes und ich vermisse es noobishly.

%Vor%     
C Smith 15.04.2013, 14:17
quelle

2 Antworten

2

Versuchen Sie Folgendes:

%Vor%

Es hat einige der Speicherlecks gelöst, die ich bei Aforge und PictureBoxen erlebt habe, aber der VideoSourcePlayer ist viel besser, wenn es um Speicherverbrauch geht.

    
Steven Mills 15.04.2013, 14:29
quelle
2

Ich denke, das ist ein Bereich, der Verbesserungen nutzen kann:

%Vor%

Dieser Codeblock blutet bei jedem Drücken der Verbindungstaste.

Sie müssen auf der Hauptebene ziemlich genau auf die VCD verweisen. Definieren Sie daher eine Membervariable auf der Klassenebene Form1:

%Vor%

Und führen Sie im connect-Ereignishandler Folgendes aus:

%Vor%

Übrigens, ich gehe davon aus, dass Sie .NET 3.5 oder höher sind, daher die neue Syntax für die Zuweisung von Delegierten.

    
code4life 15.04.2013 14:25
quelle