位图和处理内存泄漏
Bitmap and handle memory leak
我正在开发一个简单的 C# winform 应用程序。
我创建了一个位图并获得了一个位图句柄。
并使用位图句柄。
当时我配置bitmap的时候,bitmap句柄是不是空闲内存?
当我使用 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);
我没有使用 Intel media sdk 库,所以我不能说下面的代码是否有内存泄漏:
int newCookie;
intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie);
if (prevCookie > 0)
intelMediaSdkVariable.RemoveItem2(prevCookie);
prevCookie = newCookie;
我正在开发一个简单的 C# winform 应用程序。 我创建了一个位图并获得了一个位图句柄。 并使用位图句柄。
当时我配置bitmap的时候,bitmap句柄是不是空闲内存? 当我使用 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);
我没有使用 Intel media sdk 库,所以我不能说下面的代码是否有内存泄漏:
int newCookie;
intelMediaSdkVariable.AddImageFromHandle(hBitmap, out newCookie);
if (prevCookie > 0)
intelMediaSdkVariable.RemoveItem2(prevCookie);
prevCookie = newCookie;