繁体   English   中英

位图并处理内存泄漏

[英]Bitmap and handle memory leak

我正在开发一个简单的C#winform应用程序。 我创建一个位图并获取一个位图句柄。 并使用位图句柄。

那时,当我配置位图时,位图是否可以处理可用内存? 当我使用DeleteObject方法释放内存句柄时,是否处理了位图?

感谢您的建议。

- - - - - -编辑 - - - - - -

int prevCookie = 0;
private void testMethod(object sender, EventArgs e)
{
    Bitmap bmp = new Bitmap(100, 100);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        //Draw some shapes on bitmap
    }
    int hBitmap = bmp.GetHBitmap().ToInt32();
    //I used intel media sdk library.
    int newCookie;
    intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie);
    if (prevCookie > 0)
        intelMediaSdkVariable.RemoveItem2(prevCookie);
    prevCookie = newCookie;
    bmp.Dispose();
}

那时,当我调用testMethod 1000次时,内存增加了。 当我调用bmp.Dispose()时,hBitmap是免费的吗? 我该如何解决?

您忘记删除hBitmap句柄。

int prevCookie = 0;
private void testMethod(object sender, EventArgs e)
{
    Bitmap bmp = new Bitmap(100, 100);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        //Draw some shapes on bitmap
    }
    int hBitmap = bmp.GetHBitmap().ToInt32();
    //I used intel media sdk library.
    int newCookie;
    intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie);
    if (prevCookie > 0)
        intelMediaSdkVariable.RemoveItem2(prevCookie);
    prevCookie = newCookie;
    DeleteObject((IntPtr)hBitmap);   // <---------- You dont have this line.
    bmp.Dispose();
}

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);

我不使用英特尔媒体sdk库,所以我不能说以下代码是否存在内存泄漏:

int newCookie;
intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie);
if (prevCookie > 0)
    intelMediaSdkVariable.RemoveItem2(prevCookie);
prevCookie = newCookie;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM