C# .Net在不同的文件中连续向磁盘写入数据

C# .Net在不同的文件中连续向磁盘写入数据,c#,.net,filestream,disk,hard-drive,C#,.net,Filestream,Disk,Hard Drive,我们有一个从多个硬件设备提取数据的应用程序。每个设备的数据应存储在不同的文件中 目前,我们有一个文件流,一个文件接一个文件,当数据到来时进行写入,就这样 我们有大量的数据进入,磁盘正在与HDD(而不是SSD)斗争,我想这是因为闪存速度更快,但也因为我们不必一直跳转到不同的文件位置 默认情况下的一些指标:400个不同的数据源(每个数据源都应该有自己的文件),每个数据接收约50KB/s(因此为20MB/s)。每个数据源采集同时运行,我们总共使用了约6%的CPU 是否有办法组织磁盘刷新以确保更好的流

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

目前,我们有一个文件流,一个文件接一个文件,当数据到来时进行写入,就这样

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

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

是否有办法组织磁盘刷新以确保更好的流


我们还将考虑改进硬件,但这并不是真正的主题,因为它是提高读写速度的好方法。P> Windows和NTFS处理同一磁盘的多个并发序号IO流效率低下。很可能,您正遭受随机IO的困扰。您需要将IO安排在更大的块中

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


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

听起来您需要快速写入,并且允许相对缓慢的检索。那么,为什么不将它存储在一个文件中,或者更好的是存储在一个允许顺序写入的数据库中呢。用数据库来做这件事伙计们这不是问题。。。即使是这样,写入数据库的速度也不可能比写入磁盘的速度快,还有通信开销、SQL开销和所有DBMS开销。即使速度更快,这也不是一个选项,因为我们有太多的维护操作,这会让我们一直赚钱。我把你的问题理解为:我们的磁盘正在挣扎,因为我们必须到处跳来跳去向它写入数据,我们如何避免这种情况?答案是:按顺序写。通常的实现方法是:将其存储在数据库中。另一个选项是:您是否考虑缓存数据,例如块10 MB(X 400数据源=4 GB RAM),并在块填充后写入整个缓冲区?这样就避免了在获取小块数据时必须来回跳转。