非托管内存泄漏 [英] Unmanaged Memory leak
问题描述
我有我使用它使用的BitmapSource的WPF应用程序,但我需要做一些操作
但我需要做System.Drawing.Bitmaps的一些操作。
I have am using a WPF application which uses BitmapSource but I need to do some manipulation but I need to do some manipulation of System.Drawing.Bitmaps.
内存使用的应用增加,而它运行。
The memory use of the application increases while it runs.
我已经收窄内存泄漏这个code:
I have narrowed down the memory leak to this code:
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;
}
我认为这是托管内存没有被妥善处理,但我似乎无法找到反正做手工的。在此先感谢您的帮助!
I assume it is the unmanaged memory not being disposed of properly, but I cannot seem to find anyway of doing it manually. Thanks in advance for any help!
亚历
推荐答案
您需要调用 DeleteObject的(...)
在 HBITMAP
。参见:<一href=\"http://msdn.microsoft.com/en-us/library/1dz311e4.aspx\">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;
}
这篇关于非托管内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!