簡體   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