C# 使用多线程更快地读取文件?

C# 使用多线程更快地读取文件?,c#,multithreading,C#,Multithreading,我编写了一个脚本,使用单线程和多线程读取100mb+的文本文件。多线程脚本共享同一个StreamReader,并在StreamReader.ReadLine调用期间将其锁定。在对我的两个脚本进行计时之后,它们的速度大致相同。看起来,读线占用了大部分运行时间 下一步我可以带这个去哪里?我正在考虑将源文件拆分为多个文本文件,这样每个线程都可以使用自己的StreamReader,但这似乎有点麻烦。有没有更好的方法来加快我的进程 谢谢 下一步你能把这个带到哪里? 添加多个硬盘,然后每个硬盘有一个线程。在

我编写了一个脚本,使用单线程和多线程读取100mb+的文本文件。多线程脚本共享同一个StreamReader,并在StreamReader.ReadLine调用期间将其锁定。在对我的两个脚本进行计时之后,它们的速度大致相同。看起来,读线占用了大部分运行时间

下一步我可以带这个去哪里?我正在考虑将源文件拆分为多个文本文件,这样每个线程都可以使用自己的StreamReader,但这似乎有点麻烦。有没有更好的方法来加快我的进程


谢谢

下一步你能把这个带到哪里? 添加多个硬盘,然后每个硬盘有一个线程。在硬盘上分割文件。有点像突袭

编辑:
类似的问题在这里已经被问过很多次了。只需使用1个线程读取文件,1个线程进行处理。无需多线程处理。

下一步可以在哪里执行? 添加多个硬盘,然后每个硬盘有一个线程。在硬盘上分割文件。有点像突袭

编辑:
类似的问题在这里已经被问过很多次了。只需使用1个线程读取文件,1个线程进行处理。无需多线程。

对于一个硬盘,除了使用一个生产者读取文件和多个消费者处理模型外,您可以做的事情不多。硬盘需要移动机械磁头以寻找下一个读取位置。多个线程这样做只会使头反弹,不会带来更糟糕的加速,在某些情况下可能会更慢

分割输入文件更糟糕,因为现在文件块不再是连续的,需要进一步查找


因此,使用单个线程读取大文件的块,或者将任务放入同步队列中,例如多个使用者线程的ConcurrentQueue,或者使用QueueUserWorkItem访问内置线程池。

使用单个硬盘,除了使用一个生产者读取文件和多个消费者处理模型外,您并没有什么可以做的。硬盘需要移动机械磁头以寻找下一个读取位置。多个线程这样做只会使头反弹,不会带来更糟糕的加速,在某些情况下可能会更慢

分割输入文件更糟糕,因为现在文件块不再是连续的,需要进一步查找


因此,使用单个线程读取大文件的块,或者将任务放入同步队列中,例如多个使用者线程的ConcurrentQueue,或者使用QueueUserWorkItem访问内置线程池。

HDD?你是说硬盘吗作为对您编辑的回应,我正在尝试从我的脚本中获得更多性能。读取大文件还需要一段时间,如果我能加快速度,那就是我的目标。硬盘驱动器?你是说硬盘吗作为对您编辑的回应,我正在尝试从我的脚本中获得更多性能。阅读这个大文件还需要一段时间,如果我能加快速度,那就是我的目标。啊,这是有道理的。谢谢啊,这是有道理的。谢谢