在线程中处理我的对象以获得高效的内存使用
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();
}
}
这应该有所帮助,但您还需要解决一些其他问题:
- 如果在尝试读取下一帧时抛出异常会怎样?
- 当您到达视频流的末尾时会发生什么?
- 如果上面的代码运行速度快于视频的帧速率会怎样?
我正在使用 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();
}
}
这应该有所帮助,但您还需要解决一些其他问题:
- 如果在尝试读取下一帧时抛出异常会怎样?
- 当您到达视频流的末尾时会发生什么?
- 如果上面的代码运行速度快于视频的帧速率会怎样?