WPF: Kebocoran memori dalam CreateBitmapSourceFromHBitmap()
Dalam aplikasi WPF, penggunaan berulang CreateBitmapSourceFromHBitmap()
boleh menyebabkan kebocoran memori. Masalah ini berlaku kerana peta bit GDI asas yang digunakan oleh CreateBitmapSourceFromHBitmap()
tidak dikeluarkan dengan betul.
Untuk menyelesaikan kebocoran memori ini, peta bit GDI mesti dikeluarkan secara manual menggunakan kaedah gdi32.dll
dalam pustaka DeleteObject()
. Anda boleh mencapai ini dengan membungkus objek Bitmap
dalam pernyataan using()
, yang secara automatik memanggil kaedah Dispose()
untuk melepaskan peta bit GDI. Berikut ialah kod yang dikemas kini:
<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>
Anda boleh membebaskan peta bit GDI dan mengelakkan kebocoran memori dengan menggunakan pernyataan using
dan memanggil DeleteObject()
secara eksplisit. Ini memastikan bahawa ingatan dikeluarkan dengan betul walaupun dipanggil berulang kali.
Atas ialah kandungan terperinci WPF: Bagaimana untuk Mencegah Kebocoran Memori Apabila Menggunakan CreateBitmapSourceFromHBitmap()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!