Maison >développement back-end >C++ >WPF : Comment éviter les fuites de mémoire lors de l'utilisation de CreateBitmapSourceFromHBitmap() ?

WPF : Comment éviter les fuites de mémoire lors de l'utilisation de CreateBitmapSourceFromHBitmap() ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 10:26:40246parcourir

WPF: How to Prevent Memory Leaks When Using 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn