首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >非托管内存泄漏

非托管内存泄漏
EN

Stack Overflow用户
提问于 2011-12-30 00:06:56
回答 4查看 3.1K关注 0票数 7

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

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

我已经将内存泄漏的范围缩小到以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
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;
}

我假设这是非托管内存没有被正确处理,但我似乎找不到任何手动处理的方法。提前感谢您的帮助!

亚历克斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-30 00:10:24

你需要在你的hBitmap上调用DeleteObject(...)。请参阅:http://msdn.microsoft.com/en-us/library/1dz311e4.aspx

代码语言:javascript
代码运行次数:0
运行
复制
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;
}
票数 9
EN

Stack Overflow用户

发布于 2011-12-30 00:10:30

您需要在hBitmap上调用DeleteObject(hBitmap)

代码语言:javascript
代码运行次数:0
运行
复制
private BitmapSource BitmaptoBitmapsource(System.Drawing.Bitmap bitmap) {
        BitmapSource bms;
        IntPtr hBitmap = bitmap.GetHbitmap();
        BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
        try {
            bms = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, sizeOptions);
            bms.Freeze();
        } finally {
            DeleteObject(hBitmap);
        }
        return bms;
}
票数 4
EN

Stack Overflow用户

发布于 2011-12-30 00:11:49

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8670151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档