C# 并行二进制读取器

C# 并行二进制读取器,c#,multithreading,C#,Multithreading,我有一个并行的.Foreach循环,在同一组大数据文件上创建二进制读取器 我只是想知道这些读卡器以并行方式读取相同的文件是否会影响性能(即,如果他们只读取不同的文件,是否会更快? 我这样问是因为涉及到很多I/O磁盘访问(我猜…) 编辑:我忘了提到:我使用的是Amazon EC2实例,数据位于分配给它的C:\磁盘上。我不知道这对这个问题有什么影响 编辑2:我将进行测量,复制数据文件夹并从两个不同的源读取数据,然后查看结果。使用多个线程从同一磁盘读取数据不是一个好主意。由于磁盘的机械磁头每次都需要旋

我有一个并行的.Foreach循环,在同一组大数据文件上创建二进制读取器
我只是想知道这些读卡器以并行方式读取相同的文件是否会影响性能(即,如果他们只读取不同的文件,是否会更快?
我这样问是因为涉及到很多I/O磁盘访问(我猜…)

编辑:我忘了提到:我使用的是Amazon EC2实例,数据位于分配给它的C:\磁盘上。我不知道这对这个问题有什么影响


编辑2:我将进行测量,复制数据文件夹并从两个不同的源读取数据,然后查看结果。

使用多个线程从同一磁盘读取数据不是一个好主意。由于磁盘的机械磁头每次都需要旋转以寻找下一个读取位置,因此基本上是用多个线程将其反弹,从而影响性能


最好的方法实际上是使用单个线程按顺序读取文件,然后将数据块交给一组线程并行处理。

使用多个线程从同一磁盘读取不是一个好主意。由于磁盘的机械磁头每次都需要旋转以寻找下一个读取位置,因此基本上是用多个线程将其反弹,从而影响性能


最好的方法实际上是使用单个线程按顺序读取文件,然后将数据块交给一组线程并行处理。

这取决于文件的位置。如果您使用的是一个机械硬盘,那么不-不要并行读取文件,这会影响性能。不过,您可能有其他配置:

  • 在单个SDD上,并行读取文件可能不会影响性能,但我不希望您获得任何好处
  • 在使用RAID 1和半正派RAID控制器的两个镜像磁盘上,您可以一次读取两个文件并获得可观的性能
  • 如果您的文件存储在SAN上,您可以一次读取几个文件,从而提高性能

    您必须尝试一下,但必须小心——如果文件不够大,操作系统缓存机制将影响您的测量,第二次测试运行将非常快


这取决于文件所在的位置。如果您使用的是一个机械硬盘,那么不-不要并行读取文件,这会影响性能。不过,您可能有其他配置:

  • 在单个SDD上,并行读取文件可能不会影响性能,但我不希望您获得任何好处
  • 在使用RAID 1和半正派RAID控制器的两个镜像磁盘上,您可以一次读取两个文件并获得可观的性能
  • 如果您的文件存储在SAN上,您可以一次读取几个文件,从而提高性能

    您必须尝试一下,但必须小心——如果文件不够大,操作系统缓存机制将影响您的测量,第二次测试运行将非常快


我会想象答案会和我的一样。我会想象答案会和我的一样。这是一个非常坏的消息,我的朋友。我必须重新编写整个应用程序核心:(()实际上没有任何改变。如果它是一个机械磁盘,你不应该期望多线程读取会有任何加速。这是一个非常坏的消息,我的朋友。我必须重新编写整个应用程序核心:(((实际上不会改变任何东西。如果它是一个单一的机械磁盘,你不应该期望多线程读取会有任何加速。哦!那么一定要尝试并行读取,你可能会感到惊讶。哦!那么一定要尝试并行读取,你可能会感到惊讶。