0

我在 VC++ 下使用 OpenCV 2.2 编写了一个应用程序。我从不同的网络流中获取视频,并在单独的线程中逐帧写入 AVI 文件。视频流有数百个,我的应用程序将数百个文件写入磁盘,这非常重,有人可以告诉我优化的方法吗

提前致谢

4

1 回答 1

0

哦亲爱的。我希望你有足够的内存。

编写多个文件真的很痛苦。您可以做的最好的事情是通过始终尽可能合理地写入尽可能大的 AVI 帧(最好是扇区大小的倍数)来减轻写入搜索。也许:

1) 一个“FrameBuf”帧缓冲类。在启动时创建一个 *FrameBuf 的垃圾负载并将它们汇集到生产者-消费者队列中。

2) 用于多个 *FrameBuf 实例的“FrameVec”容器类。您可能还需要汇集这些。

3) 用于将 *FrameVec 的内容写入磁盘系统的线程池。这将包含很少的线程,可能只有一个,以获得最佳的磁盘写入性能和很少的寻道。最好使线程数在运行时可配置/可更改,以优化整体吞吐量。最好让它全部可配置 - *FrameBuf 池的深度,每个 *FrameVec 中的 *FrameBuf 数量 - 一切。

如果可能,请使用 SSD。如果系统有任何“安静”时间,它可以将累积的 avi 移动到一个大的旋转器或网络磁盘,以便为下一个“忙碌”时间释放 SSD。

在移动各种实例时,请记住以下咒语:

“堆栈对象、复制 ctors、任何没有 * 坏的模板类”和“指针、池、指针容器好”。

祝你好运..

于 2012-09-25T13:08:21.397 回答