我应该始终最小化我的应用中的IO

时间:2015-07-14 14:08:29

标签: c# disk-io

我有一个c#桌面应用。

一次从4个数码相机中读取1个JPEG帧。

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

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

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

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

我知道如果窃贼窃取了我的电脑,他们也会拥有我的所有镜头,但我可以通过保存到存放在保险箱中的外部硬盘驱动器来避免这种情况。(例如)。

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

感谢

1 个答案:

答案 0 :(得分:2)

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

写作率

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

如何提高写作效率

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

  1. 大多数操作系统已经有某种缓存机制来防止磁盘颠簸和数据碎片。
  2. 您希望将最新的帧写入磁盘,即防止丢失数据。缓存是相反的,因为它的延迟写入和整个缓冲区可能在失败的情况下丢失(例如在你的情况下如果有人拔掉设备)。
  3. 这就是为什么我认为你应该尽可能简化你的实现(想想KISS)。您甚至可以考虑禁用操作系统缓存。这可能会导致更多的数据碎片,但您将确保在磁盘上写入最新的帧。 (请注意,对于SSD,碎片问题无关紧要。)