Я новичок в C #. Я должен многократно обновлять графическое окно графического интерфейса в рабочем потоке. Изображение получается с камеры, опрашивающей драйвер с помощью метода GetImage, который извлекает изображение для отображения. Даже если я выделю растровое изображение с помощью директивы «using» и явно вызову G.C, память никогда не будет освобождена.
Рабочий поток выглядит примерно так:
while (true)
{
// request image with IR signal values (array of UInt16)
image = axLVCam.GetImage(0);
lut = axLVCam.GetLUT(1);
DrawPicture(image, lut);
//GC.Collect();
}
Хотя метод DrawPicture похож на
public void DrawPicture(object image, object lut)
{
[...]
// We have an image - cast it to proper type
System.UInt16[,] im = image as System.UInt16[,];
float[] lutTempConversion = lut as float[];
int lngWidthIrImage = im.GetLength(0);
int lngHeightIrImage = im.GetLength(1);
using (Bitmap bmp = new Bitmap(lngWidthIrImage, lngHeightIrImage)) {
[...many operation on bitmap pixel...]
// Bitmap is ready - update image control
//SetControlPropertyThreadSafe(tempTxtBox, "Text", string.Format("{0:0.#}", lutTempConversion[im[160, 100]]));
//tempTxtBox.Text = string.Format("{0:00000}", im[160, 100]);
//System.Drawing.Image.FromHbitmap(bmp.GetHbitmap());
pic.Image = System.Drawing.Image.FromHbitmap(bmp.GetHbitmap());
}
}
Проблемы возникают с
pic.Image = System.Drawing.Image.FromHbitmap (bmp.GetHbitmap ());
На самом деле, комментируя эту строку кода, сборка мусора работает так, как она работает.
Лучше проблема, похоже, с
System.Drawing.Image.FromHbitmap (bmp.GetHbitmap ())
Какой-нибудь совет, чтобы решить эту утечку памяти?
Большое спасибо!