Утечка памяти OpenCvSharp

#c# #opencv #image-processing #computer-vision

Вопрос:

Я использую OpenCvSharp для захвата и смешивания видео. У меня проблема с утечкой памяти. Хотя я избавился от всего, но я наблюдал постоянное увеличение памяти. У вас есть какие-либо предложения по этой проблеме. Огромное спасибо.

 
while (videoStreamFlag)
            {
                if(startFlag)
                {
                    try
                    {
                        capture2.Read(image2);
                        capture.Read(image);

                        if (image.Empty() || image2.Empty())
                        {
                            videoStreamFlag = false;
                            break;
                        }

                        if (bitimg != null)
                            bitimg.Dispose();
                        bitimg = new Bitmap(image.Width, image.Height, ((image.Width * 3   3) / 4) * 4, PixelFormat.Format24bppRgb, image.Data);

                        if (result != null)
                            result.Dispose();
                        result = new Bitmap(bitimg.Width, bitimg.Height);

                        using (var g = Graphics.FromImage(result))
                        {
                            g.DrawImageUnscaled(bitimg, 0, 0);

                            if (bitimg != null)
                                bitimg.Dispose();
                            bitimg = new Bitmap(image2.Width, image2.Height, ((image2.Width * 3   3) / 4) * 4, PixelFormat.Format24bppRgb, image2.Data);
                            bitimg = SetImageOpacity(bitimg, Opacity / 100f);
                            g.DrawImageUnscaled(bitimg, 0, 0);


                            if (pictureBox.Image != null)
                                panel.Invoke(new MethodInvoker(delegate () { pictureBox.Image.Dispose(); }));

                            Thread.Sleep(1);
                            pictureBox.Image = resu<

                            Thread.Sleep(1);
                        }

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("[ERROR!!!]VideoBlending Error...{0}", ex.Message);
                        videoStreamFlag = false;
                    }
                }
            }
 

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. panel.Invoke(new MethodInvoker(delegate () { result.Dispose(); })); result = new Bitmap(bitimg.Width, bitimg.Height); очевидно, что это не имеет смысла (и является причиной утечки памяти), потому что вы всегда вызываете dispose в текущий result … под текущим я имею в виду во время вызова result.Dispose() , а не во время panel.Invoke и нет, это не одно и то же время

2. @Selvin я использовал result.Dispose() сначала, но я столкнулся с той же проблемой.