Почему так много памяти использует этот код?

Ниже представленный код употребляет очень много памяти, можете подсказать как можно сделать чтобы он не использовал столько ?

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
using System.Windows.Forms;

// Important: include the opencvsharp library in your code
using OpenCvSharp;
using OpenCvSharp.Extensions;

namespace CameraApp
{
    public partial class Form1 : Form
    {

        private Thread camera;

        private void CaptureCamera()
        {
            camera = new Thread(new ThreadStart(CaptureCameraCallback));
            camera.Start();
        }
        private void CaptureCameraCallback()
        {

            VideoCapture capture = new VideoCapture(0);
            capture.Open(0);

            while (true)
            {
                pictureBox1.Image = BitmapConverter.ToBitmap(capture.RetrieveMat());
            }
        }

        public Form1()
        {
            InitializeComponent();
            CaptureCamera();
        }


        // When the user clicks on the start/stop button, start or release the camera and setup flags
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            pictureBox1.Hide();
        }
    }
}
  • Вопрос задан
  • 145 просмотров
Решения вопроса 2
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что ты в цикле (матерь божья) забираешь снимки с камеры, которые не сразу освобождаются
Ответ написан
Комментировать
Вот тут ты создаёшь новые экземпляры снимков с камеры
pictureBox1.Image = BitmapConverter.ToBitmap(capture.RetrieveMat());

1. Эти картинки сами по себе много места занимают
2. Ты нигде не освобождаешь память от них. Image реализует IDisposable и его нужно вызывать самостоятельно, когда картинка больше не нужна.
При этом это ещё происходит в бесконечном цикле.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы