我有一个Parallel.Foreach循环在同一组大型数据文件上创建二进制读取器
我只是想知道这些读者是否正在以平行时尚的方式阅读相同的文件会损害性能(即,如果他们只是阅读不同的文件,它会更快吗?)
我问,因为涉及很多I / O磁盘访问(我猜......)
编辑:我忘了提及:我使用的是Amazon EC2实例,数据位于分配给它的C:\ Disk上。我不知道它是如何影响这个问题的。
编辑2:我将进行测量,复制数据文件夹并从2个不同来源读取,看看它给出了什么。
答案 0 :(得分:3)
使用多个线程从同一磁盘读取不是一个好主意。由于磁盘的机械头每次都需要旋转才能寻找下一个读取位置,所以你基本上是用多个线程弹跳它,从而损害了性能。
最好的方法实际上是使用单个线程顺序读取文件,然后将块交给一组线程来并行处理它们。
答案 1 :(得分:2)
取决于文件的位置。如果您使用的是一个机械硬盘,那么不 - 不要并行读取文件,这会损害性能。但是,您可能有其他配置:
如果您的文件存储在SAN上,您一定可以一次阅读一些文件并提高性能。
你必须要尝试它,但你必须小心这一点 - 如果文件不够大,操作系统缓存机制将影响你的测量,第二次测试运行将是真的快。