我正在编写C#程序来分析视频。基本操作是:
如果步骤2-4需要超过一个帧时间(30‘t),那么它会删除帧,这是我不想要的。
参数化将减少平均时间,从而降低丢失帧的可能性。但是,输出必须与输入的顺序相同。例如,带有注释和结果的帧必须以正确的顺序出现。
我目前加快速度的方法是将过程分成几个部分,并将每个提要分成一个BlockingCollection,例如,在不同的任务中
与其将进程的每个部分分割成不同的线程,我想要的是让每个线程池完成对一个框架的整个处理。问题是如何维持结果的秩序。
例如,我可以让每个线程将结果放到一个BlockingCollection中,但是如果frame #2在frame #1之前完成了处理,结果就会乱七八糟。
更新
结果应该在接近实时显示给用户,因为程序是为了控制一些仪器,因此,排序的结果可能是不可行的。
发布于 2018-04-11 11:55:10
最简单的方法可能是从PLinQ中使用PLinQ:
var processedFrames = frames.AsParallel()
.AsOrdered()
.Select(Process)
.ToList();假设有一种方法
ProcessedFrame Process(UnprocessedFrame original)
{
// ...
}这将处理整个序列,并作为结果得到一个有序的结果帧序列。
https://stackoverflow.com/questions/49772165
复制相似问题