Guten Morgen liebe Community,
ich habe ein Projekt, wo ich viel mit Bildanalyse/-Bearbeitung mache.
Insgesamt mache ich jede Sekunde 6 Bilder (1 Bild pro Kamera).
Diese Bilder möchte ich zum Einen anzeigen und zum Anderen weiter bearbeiten.
Nun habe ich festgestellt, dass meine Anwendung kontinuierlich Daten in den RAM schäffelt -> MemoryLeak!
Normalerweise sollten die angezeigten/bearbeiteten Bilder in der nächsten Sekunde wieder überschrieben werden, was sie scheinbar nicht wirklich tun...
Ich weiß, dass man Bilder mit
Ist das zwingend notwendig, wenn ich sie neu zuweise?
Kurz etwas zur Architektur:
Ich habe eine Klasse, welche eine Kamera repräsentiert.
Diese hat eine Methode
Sobald ein Bild gemacht wurde, wird dies erst noch zurecht geschnitten:
Gibt's hier evtl. schon optimierungsbedarf ?
EDIT: Das Dispose hier führt dazu, dass das Bild im UI leer bleibt.
Ab hier benötige ich das ursprünglich geschossene Kamerabild nicht mehr, da ich nur noch mit dem zugeschnittenen weiterarbeite.
Ok, weiter geht's.
Wurde das Bild zurecht geschnitten, wird ein Event für das UI gefeuert, um das zugeschnittene Bild anzuzeigen.
Frage: Ist das Bitmap-Objekt ab jetzt gesperrt, weil es in einer PictureBox angezeigt wird?
Falls nein, könnte ich ja theoretisch immer mit dem selben Bitmap-Objekt weiterarbeiten (bearbeiten etc.)...
Anschließend wird asynchron eine aufwändige Bildbearbeitung mit dem Bild aus der Property
Vor der Bearbeitung wird allerdings ein neues Bitmap-Objekt erzeugt, da das Bild noch im UI verwendet (angezeigt) wird.
Die grundlegende Frage ist eigentlich, wann ich ein Bild klonen, wann neu instanziieren und wann ich keines von beiden machen muss.
Achja, und wann ich es wieder freigeben muss...
Danke für Eure Hilfe
ich habe ein Projekt, wo ich viel mit Bildanalyse/-Bearbeitung mache.
Insgesamt mache ich jede Sekunde 6 Bilder (1 Bild pro Kamera).
Diese Bilder möchte ich zum Einen anzeigen und zum Anderen weiter bearbeiten.
Nun habe ich festgestellt, dass meine Anwendung kontinuierlich Daten in den RAM schäffelt -> MemoryLeak!
Normalerweise sollten die angezeigten/bearbeiteten Bilder in der nächsten Sekunde wieder überschrieben werden, was sie scheinbar nicht wirklich tun...
Ich weiß, dass man Bilder mit
.Dispose()
freigeben kann.Ist das zwingend notwendig, wenn ich sie neu zuweise?
Kurz etwas zur Architektur:
Ich habe eine Klasse, welche eine Kamera repräsentiert.
Diese hat eine Methode
TakeSnapshot
, womit das Bild machen angestartet wird und eine Property Image
, die das zuletzt gemachte Bild beherbergt.Sobald ein Bild gemacht wurde, wird dies erst noch zurecht geschnitten:
Gibt's hier evtl. schon optimierungsbedarf ?
EDIT: Das Dispose hier führt dazu, dass das Bild im UI leer bleibt.
Ab hier benötige ich das ursprünglich geschossene Kamerabild nicht mehr, da ich nur noch mit dem zugeschnittenen weiterarbeite.
Ok, weiter geht's.
Wurde das Bild zurecht geschnitten, wird ein Event für das UI gefeuert, um das zugeschnittene Bild anzuzeigen.
Frage: Ist das Bitmap-Objekt ab jetzt gesperrt, weil es in einer PictureBox angezeigt wird?
Falls nein, könnte ich ja theoretisch immer mit dem selben Bitmap-Objekt weiterarbeiten (bearbeiten etc.)...
Anschließend wird asynchron eine aufwändige Bildbearbeitung mit dem Bild aus der Property
Image
vorgenommen (LockBits).Vor der Bearbeitung wird allerdings ein neues Bitmap-Objekt erzeugt, da das Bild noch im UI verwendet (angezeigt) wird.
Die grundlegende Frage ist eigentlich, wann ich ein Bild klonen, wann neu instanziieren und wann ich keines von beiden machen muss.
Achja, und wann ich es wieder freigeben muss...
Danke für Eure Hilfe
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TRiViUM“ ()