HBitmap からの WPF BitmapSource 作成でのメモリ リーク
CreateBitmapSourceFromHBitmap() を使用して WPF でピクセル単位のイメージを作成すると、メモリ リークが発生する可能性があります適切に扱われなかった場合。 BitmapSource メモリを解放せずにこのメソッドを繰り返し呼び出すと、メモリ使用率が増加し続けます。
根本的な原因
この問題は、Bitmap.GetHbitmap( ) GDI ビットマップ オブジェクトへのハンドルを取得します。 MSDN では、関連するメモリ リソースを解放するには、GDI の DeleteObject メソッドを使用してこのハンドルを解放する必要があると明示的に述べています。
解決策
メモリ リークを修正するには、メモリ リークを解放することが重要です。 Bitmap.GetHbitmap() から取得したハンドル。次の変更を行う必要があります:
コード例
次のコードは、このアプローチの使用方法を示しています。
// Import DeleteObject from gdi32.dll [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); // Your Code using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000)) { // Obtain HBitmap handle IntPtr hBitmap = bmp.GetHbitmap(); try { // Create BitmapSource using HBitmap (using statement handles GDI bitmap disposal) var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); } finally { // Release HBitmap handle DeleteObject(hBitmap); } }
これらの変更を実装すると、メモリ リークを効果的に防止し、HBitmap から作成された BitmapSource に関連付けられたリソースを正しく解放できます。
以上がHBitmap から WPF BitmapSource を作成するときにメモリ リークを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。