Maison >développement back-end >C++ >WPF : Comment éviter les fuites de mémoire lors de l'utilisation de CreateBitmapSourceFromHBitmap() ?
WPF : fuite de mémoire dans CreateBitmapSourceFromHBitmap()
Dans les applications WPF, l'utilisation répétée de CreateBitmapSourceFromHBitmap()
peut provoquer des fuites de mémoire. Ce problème se produit car le bitmap GDI sous-jacent utilisé par CreateBitmapSourceFromHBitmap()
n'est pas publié correctement.
Pour résoudre cette fuite de mémoire, le bitmap GDI doit être libéré manuellement à l'aide de la méthode gdi32.dll
dans la bibliothèque DeleteObject()
. Vous pouvez y parvenir en encapsulant l'objet Bitmap
dans une instruction using()
, qui appelle automatiquement la méthode Dispose()
pour libérer le bitmap GDI. Voici le code mis à jour :
<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>
Vous pouvez libérer un bitmap GDI et éviter les fuites de mémoire en utilisant l'instruction using
et en appelant DeleteObject()
explicitement. Cela garantit que la mémoire est libérée correctement même en cas d'appel répété.
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!