CreateBitmapSourceFromHBitmap()
WPFs CreateBitmapSourceFromHBitmap()
bietet eine praktische Möglichkeit, System.Drawing.Bitmap
Bilder in WPF-Anwendungen zu integrieren. Eine unsachgemäße Verwendung kann jedoch zu erheblichen Speicherverlusten führen.
Wiederholte Aufrufe von CreateBitmapSourceFromHBitmap()
ohne ordnungsgemäße Bereinigung führen zu einem stetigen Anstieg des Anwendungsspeicherverbrauchs. Dies ist darauf zurückzuführen, dass die zugrunde liegenden GDI-Bitmap-Ressourcen, die dem System.Drawing.Bitmap
-Objekt zugeordnet sind, nicht freigegeben wurden.
Um Speicherlecks zu verhindern, löschen Sie das GDI-Bitmap-Handle explizit, nachdem Sie es mit CreateBitmapSourceFromHBitmap()
verwendet haben. Der folgende Code demonstriert diesen entscheidenden Schritt:
<code class="language-csharp">[DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000)) { IntPtr hBitmap = bmp.GetHbitmap(); try { var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); // Use the 'source' BitmapSource here... } finally { DeleteObject(hBitmap); } }</code>
Die using
-Anweisung stellt sicher, dass System.Drawing.Bitmap
korrekt entsorgt wird, auch wenn Ausnahmen auftreten.
System.Drawing.Bitmap
-Objekt vor dem BitmapSource
entsorgt wird, um potenzielle Thread-übergreifende Zugriffsprobleme zu vermeiden.Imaging.CreateBitmapSource()
als bevorzugte Alternative. Diese Methode verwaltet von Natur aus die zugrunde liegenden Bitmap-Ressourcen, sodass keine manuelle Bereinigung erforderlich ist und das Risiko von Speicherverlusten verringert wird.Das obige ist der detaillierte Inhalt vonWie kann ich Speicherlecks verhindern, wenn ich CreateBitmapSourceFromHBitmap() von WPF verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!