Heim >Backend-Entwicklung >C++ >WPF: Wie verhindert man Speicherlecks bei der Verwendung von CreateBitmapSourceFromHBitmap()?
WPF: Speicherverlust in CreateBitmapSourceFromHBitmap()
In WPF-Anwendungen kann die wiederholte Verwendung von CreateBitmapSourceFromHBitmap()
zu Speicherverlusten führen. Dieses Problem tritt auf, weil die zugrunde liegende GDI-Bitmap, die von CreateBitmapSourceFromHBitmap()
verwendet wird, nicht korrekt freigegeben wird.
Um dieses Speicherleck zu beheben, muss die GDI-Bitmap manuell mithilfe der gdi32.dll
-Methode in der DeleteObject()
-Bibliothek freigegeben werden. Sie können dies erreichen, indem Sie das Bitmap
-Objekt in eine using()
-Anweisung einschließen, die automatisch die Dispose()
-Methode aufruft, um die GDI-Bitmap freizugeben. Hier ist der aktualisierte Code:
<code class="language-csharp">using System.Runtime.InteropServices; ... 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()); } finally { DeleteObject(hBitmap); } }</code>
Sie können eine GDI-Bitmap freigeben und Speicherlecks verhindern, indem Sie die using
-Anweisung verwenden und DeleteObject()
explizit aufrufen. Dadurch wird sichergestellt, dass der Speicher auch bei wiederholten Aufrufen korrekt freigegeben wird.
Das obige ist der detaillierte Inhalt vonWPF: Wie verhindert man Speicherlecks bei der Verwendung von CreateBitmapSourceFromHBitmap()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!