
Fuite de mémoire dans la création WPF BitmapSource à partir de HBitmap
La création d'images pixel par pixel dans WPF à l'aide de CreateBitmapSourceFromHBitmap() peut entraîner des fuites de mémoire s'il n'est pas manipulé correctement. Lorsque cette méthode est appelée à plusieurs reprises sans libérer la mémoire BitmapSource, l'utilisation de la mémoire continue d'augmenter.
Cause sous-jacente
Le problème vient du fait que Bitmap.GetHbitmap( ) récupère un handle vers un objet bitmap GDI. MSDN indique explicitement que ce handle doit être libéré à l'aide de la méthode DeleteObject de GDI pour libérer les ressources mémoire associées.
Solution
Pour remédier à la fuite mémoire, il est crucial de libérer le handle obtenu à partir de Bitmap.GetHbitmap(). Les modifications suivantes doivent être apportées :
Exemple Code
Le code suivant montre comment l'utiliser approche :
// 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);
}
}En implémentant ces changements, vous pouvez prévenir efficacement la fuite de mémoire et libérer correctement les ressources associées au BitmapSource créé à partir d'un HBitmap.
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!
police de définition du bloc-notes
Code écran bleu 0x000009c
À quel point le Dimensity 6020 est-il équivalent à Snapdragon ?
pycharm ouvre une nouvelle méthode de fichier
Comment télécharger des vidéos de Douyin
Comment lire les fichiers py en python
Comment ouvrir le fichier apk
Utilisation de l'instruction delete