1

我有 ac# 桌面应用程序。

它一次从 4 个数码相机“读取”1 个 JPEG 帧。

每个 JPEG 不超过 20K 字节。对于检测到的每一个运动,我都会将帧保存到我的硬盘驱动器中。

存储我的素材的另一种方法是在我的托管代码中创建 AVI 文件,并在建立一定大小后将其拆分。

我一次保存 1 个 JPEG 的原因是,如果窃贼在运行应用程序的情况下窃取了我的 PC 或/并且 PC 自行重新启动或/并且应用程序刚刚停止,那么我将始终能够保存最新的帧。

如果我采用 AVI 方法,我将失去我在代码中设置的任何截止值。

我知道如果窃贼偷走了我的电脑,他们也会拥有我所有的镜头,但我可以通过保存到存储在保险箱中的外部硬盘驱动器来规避这一点(例如)。

因此,请记住要保存的字节数很少(但可能很频繁),这是我希望在内存效率方面达到的最佳效果吗?

谢谢

4

1 回答 1

2

让我们考虑问题的不同方面。

写入率

您的最大写入速率为 800KB/s(10 FPS,4 个摄像头,每帧 20KB),这在现代 HDD 上并不是很高(即使对于外部硬盘驱动器也是如此)。如果您使用的是 SSD,它就更不重要了。

如何提高写作效率

传统上,通过将数据缓存到缓冲区并在缓冲区达到一定大小时写入大块数据来提高写入效率。就您而言,我认为编写自己的缓冲区机制是个坏主意。

  1. 大多数操作系统已经有某种缓存机制来防止磁盘抖动和数据碎片。
  2. 您希望将最新的帧尽可能写入磁盘,即防止数据丢失。缓存恰恰相反,因为它会延迟写入,并且在发生故障时整个缓冲区可能会丢失(例如,如果有人拔掉设备)。

这就是为什么我认为你应该让你的实现尽可能简单(想想 KISS)。您甚至可以考虑禁用操作系统缓存。这可能会导致更多的数据碎片,但您将确保将最新的帧写入磁盘。(请注意,对于 SSD,碎片问题无关紧要。)

于 2015-07-14T14:36:31.913 回答