我有从脚本中读取视频帧的代码,只要帧准备好就会调用此方法。
public void output_FrameReady(object sender, FrameStatus e) {
pos = e.Index;
VsPlane plane = e.Frame.GetPlane(0);
Dispatcher.Invoke(() => {
Host.Source = BitmapSource.Create(
plane.Width, plane.Height, 96, 96, PixelFormats.Bgr32, null,
plane.Ptr, plane.Stride * plane.Height, plane.Stride);
});
base.PositionChanged();
}
当使用1个线程运行时,如果我删除显示在Image控件中的Dispatcher.Invoke行,则会得到120fps。如果我保留显示,我会得到50fps。
当运行8个线程时,没有显示我得到160fps,显示我得到75fps但是UI非常缓慢。
如何改善这种表现?部分问题是内存传输和显示是在一个线程中完成的,用于在所有8个线程中处理的代码;并且显示器本身非常慢。