位图和句柄内存泄漏
问题描述:
我正在开发一个简单的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;
可能。取决于代码 – Plutonix
Plutonix你应该发布它作为答案:) – Sakura
我们需要看到_how_是否创建位图为例。对于我们所知道的所有你正在使用p-invoke。 _“我创建一个位图,并获得一个位图句柄”_担心我 – MickyD