Maison >développement back-end >C++ >Comment éviter les fuites de mémoire lors de l'utilisation de CreateBitmapSourceFromHBitmap() de WPF ?
Résolution des fuites de mémoire dans WPF lors de l'utilisation de CreateBitmapSourceFromHBitmap()
Un problème fréquent lors de la génération d'images pixel par pixel dans les applications WPF résulte de l'utilisation de CreateBitmapSourceFromHBitmap()
pour convertir un System.Drawing.Bitmap
en un BitmapSource
. Cette conversion entraîne souvent des fuites de mémoire car la mémoire de l'objet bitmap GDI n'est pas automatiquement libérée jusqu'à la fermeture de l'application.
La solution : une bonne gestion des ressources
La documentation de Microsoft pour Bitmap.GetHbitmap()
indique clairement que les développeurs doivent libérer manuellement la mémoire de l'objet bitmap GDI à l'aide de la méthode DeleteObject
. Cette étape cruciale empêche l’accumulation de mémoire.
L'exemple de code suivant illustre la technique correcte de gestion de la mémoire :
<code class="language-csharp">// Import DeleteObject from gdi32.dll [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); // Use a using statement for proper resource disposal 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>
L'instruction using
garantit que l'objet System.Drawing.Bitmap
est correctement éliminé, même si des exceptions se produisent. Ceci, combiné à l'appel explicite à DeleteObject
, garantit la libération des ressources GDI et évite les fuites de mémoire. Cette bonne pratique est essentielle pour créer des applications WPF robustes et efficaces.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!