
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!
Nombor halaman perkataan bermula dari halaman ketiga sebagai 1 tutorial
Tiga kaedah pengekodan yang biasa digunakan
Penggunaan fungsi terima
Apakah enjin aliran kerja java yang ada?
Bagaimana untuk mengikat data dalam senarai lungsur
Apakah perisian pengaturcaraan bahasa C?
Apakah itu CONNECTION_REFUSED
Bagaimana untuk menyelesaikan 400 permintaan buruk