gpt4 book ai didi

c# - 非托管内存泄漏

转载 作者:IT王子 更新时间:2023-10-28 23:37:05 27 4
gpt4 key购买 nike

我正在使用一个使用 BitmapSource 的 WPF 应用程序,但我需要进行一些操作但我需要对 System.Drawing.Bitmaps 进行一些操作。

应用程序的内存使用量在运行时会增加。

我已将内存泄漏缩小到此代码:

private BitmapSource BitmaptoBitmapsource(System.Drawing.Bitmap bitmap)
{
BitmapSource bms;
IntPtr hBitmap = bitmap.GetHbitmap();
BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
bms = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, sizeOptions);
bms.Freeze();
return bms;
}

我认为这是未正确处理的非托管内存,但我似乎无法找到手动执行此操作的方法。提前感谢您的帮助!

亚历克斯

最佳答案

您需要在 hBitmap 上调用 DeleteObject(...)。见:http://msdn.microsoft.com/en-us/library/1dz311e4.aspx

private BitmapSource BitmaptoBitmapsource(System.Drawing.Bitmap bitmap)
{
BitmapSource bms;
IntPtr hBitmap = bitmap.GetHbitmap();
BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
bms = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap,
IntPtr.Zero, Int32Rect.Empty, sizeOptions);
bms.Freeze();

// NEW:
DeleteObject(hBitmap);

return bms;
}

关于c# - 非托管内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8670151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com