.Net将不同文件中的数据连续写入磁盘

本文关键字:连续 数据 磁盘 文件 Net | 更新日期: 2023-09-27 18:29:22

我们有一个应用程序,可以从几个硬件设备中提取数据。每个设备的数据都应该存储在不同的文件中。

目前,我们有一个文件一个文件流,并在数据到来时进行写入,仅此而已

我们有很多数据进入,磁盘正在与HDD(而不是SSD)作斗争,我想是因为闪存更快,但也因为我们不必一直跳到不同的文件位置。

默认情况下的一些指标:400个不同的数据源(每个数据源都应该有自己的文件),我们收到的每个数据约为50KB/s(因此为20MB/s)。每次数据源采集都是并发运行的,我们总共使用了约6%的CPU。

有没有一种方法可以组织对磁盘的冲洗,以确保更好的流量?

我们也会考虑改进硬件,但这并不是真正的主题,因为这是改进读/写的好方法

.Net将不同文件中的数据连续写入磁盘

Windows和NTFS处理到同一磁盘的多个并发顺序IO流的效率非常低。也许,你正遭受着随机IO的折磨。你需要把IO安排得更大。

你可能也会看到极端的碎片化。在这种情况下,NTFS有时会将每N个扇区分配给N个文件中的每一个。很难相信NTFS在这种情况下有多糟糕。

缓冲每个文件的数据,直到您拥有大约16MB。然后,把它冲出来。不要同时写入多个文件。这样,每个16MB段就有一个磁盘寻道,这将寻道开销减少到接近零。