Я просмотрел несколько страниц похожих запросов, реализовал большинство предложений, но, похоже, не нашел ничего, что сработало до сих пор. Надеюсь, я не упускаю из виду нечто очевидное.C# Ошибка памяти для фотокамер
Правильно, поэтому я использую 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» bool в true, память перестает расти, даже если я перемещаю окно по экрану. «stopCapturing» не используется ни для чего другого, и событие продолжает запускаться как обычно, единственное различие заключается в том, что изображение отображается в окне изображения. Я в недоумении относительно причины, поэтому любая помощь будет оценена по достоинству.
PS: Не уверен, что это связано, но на моей рабочей станции есть 2 экрана.
Начните с удаления пустого улова и GC.Collect. –
Не уверен в необходимости «Clone». Я использовал 'new Bitmap (изображение)' без проблем раньше. –