跨线程拆分工作

Pet*_* W. 3 .net c# multithreading

目前,我逐个处理从视频中读取的帧,然后将它们写入文件.这似乎效率低,速度慢,所以我想将工作分成多个线程.

我目前的代码可以这样总结:

for(long n = 0; n < totalframes; n++) {
    using(Bitmap frame = vreader.ReadVideoFrame()) {
        Process(frame); //awfully slow
        WriteToFile(frame);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能加载,比如四个帧,在四个线程中处理它们,等待它们全部完成,然后将它们写入文件?至关重要的是,帧的编写顺序与视频中的完全相同.

Hen*_*man 5

您可以使用例如a处理帧Parallel.ForEach().然后使用迭代器块(IEnumerable<>)读取它们.

但是写作需要更多的关注.确保在每个帧上附加一个数字,并在处理结束时将它们转储到一个BlockingCollection<T>.启动一个单独的线程(Task)来处理队列并按顺序写入帧.这是一款经典的n-Producer/1-Consumer解决方案.