在线程中处理我的对象以获得高效的内存使用

dispose my object in thread to get efficient memory usage

我正在使用 Accord.Net 在工作线程中显示 RTSP 视频流,如您所见:

Main_Form:

     VideoFileReader reader = new VideoFileReader();
     Thread Proceso1;
     Proceso1 = new Thread(new ThreadStart(updateui));
     Proceso1.Start();

我的功能:

public void updateui()
      {
               reader.Open(RTSPAddress);

                while (true)
                {
                    Bitmap frame1 = reader.ReadVideoFrame();

                    pictureRTSP.BackgroundImage = frame1;
                }
        }

它在几秒钟内工作正常,但之后我出现内存不足异常。所以我想知道如何处理线程中的所有对象?

while 循环的每次迭代都会创建一个新的位图,但它们不会被显式销毁。每次读取一帧更新显示,都需要对前一帧进行处理:

public void UpdateUI() // C# naming conventions
{
    reader.Open(RTSPAddress);
    while (true)
    {
        Bitmap previousFrame = pictureRTSP.BackgroundImage;
        Bitmap currentFrame = reader.ReadVideoFrame();
        pictureRTSP.BackgroundImage = currentFrame;
        if (previousFrame != null)
            previousFrame.Dispose();
    }
}

这应该有所帮助,但您还需要解决一些其他问题:

  • 如果在尝试读取下一帧时抛出异常会怎样?
  • 当您到达视频流的末尾时会发生什么?
  • 如果上面的代码运行速度快于视频的帧速率会怎样?