CreateBitmapSourceFromHBitmap()
WPF CreateBitmapSourceFromHBitmap()
menawarkan cara yang mudah untuk menyepadukan System.Drawing.Bitmap
imej ke dalam aplikasi WPF. Walau bagaimanapun, penggunaan yang tidak betul boleh mengakibatkan kebocoran memori yang ketara.
Panggilan berulang ke CreateBitmapSourceFromHBitmap()
tanpa pembersihan yang betul membawa kepada peningkatan berterusan dalam penggunaan memori aplikasi. Ini berpunca daripada kegagalan untuk melepaskan sumber bitmap GDI yang berkaitan dengan objek System.Drawing.Bitmap
.
Untuk mengelakkan kebocoran memori, padamkan pemegang peta bit GDI secara eksplisit selepas menggunakannya dengan CreateBitmapSourceFromHBitmap()
. Kod berikut menunjukkan langkah penting ini:
<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>
Pernyataan using
memastikan System.Drawing.Bitmap
dilupuskan dengan betul, walaupun pengecualian berlaku.
System.Drawing.Bitmap
dilupuskan sebelum BitmapSource
untuk mengelakkan masalah capaian rentas benang yang berpotensi.Imaging.CreateBitmapSource()
sebagai alternatif yang lebih baik. Kaedah ini sememangnya menguruskan sumber bitmap asas, menghapuskan keperluan untuk pembersihan manual dan mengurangkan risiko kebocoran memori.Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Kebocoran Memori Apabila Menggunakan CreateBitmapSourceFromHBitmap() WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!