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

时间:2017-11-12 06:17:28

标签: c# multithreading video-streaming rtsp dispose

我正在使用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;
                }
        }

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

1 个答案:

答案 0 :(得分:3)

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();
    }
}

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

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