Я просмотрел несколько страниц с похожими запросами, реализовал большинство предложений, но пока не могу найти ничего, что работало бы. Надеюсь, я не упускаю из виду что-то очевидное.
Итак, я использую AForge.net для захвата изображения. Он предоставляет событие, которое запускается для каждого полученного нового кадра, которое в моем коде выглядит так:
private void videoSourcePlayer_NewFrame(object sender, ref Bitmap image)
{
framesRecieved++;
try
{
if (!stopCapturing)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
}
pictureBox1.Image = image.Clone(new Rectangle(0, 0, image.Width, image.Height), image.PixelFormat);
}
}
catch { }
finally { GC.Collect(); }
}
Использование памяти очень стабильно, пока окно остается неподвижным, но как только я беру форму окна и начинаю ее перемещать, использование памяти продолжает расти. Причина, по которой меня заставили поверить, что это может быть связано с окном изображения, заключается в том, что как только я устанавливаю логическое значение «stopCapturing» в значение true, память перестает увеличиваться, даже если я перемещаю окно по экрану. «stopCapturing» не используется ни для чего другого, и событие продолжает запускаться как обычно, единственная разница заключается в том, что изображение отображается в окне изображения. Я не понимаю, в чем причина, поэтому любая помощь будет принята с благодарностью.
PS: Не уверен, связано ли это, но на моей рабочей станции 2 экрана.
Clone
. Раньше я использовалnew Bitmap(image)
без проблем. - person Ash Burlaczenko   schedule 21.03.2013