[英]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.