2017-03-17 77 views
-2

我需要每隔两个小时读取和处理将近200个文件。文件大小在500KB到10MB之间变化。阅读并处理大量带多线程的文件

什么应该是最好的实现方式?读取所有文件是一个I/O作业。另一方面,我必须将该文件中的json序列化为一个CPU作业的通用列表。

我是否需要用两种不同的并行作业将它们分开,如首先获取所有文件然后处理它们?或者在一个并行循环中一个接一个地处理和处理?

我也需要最好的存储类型。我的意思是在哪里使用并发包或只是列表?

谢谢。

+0

您是否尝试过简单而幼稚的解决方案,逐个阅读文件,逐个处理它们? 200 * 10MB = 2GB,听起来不像您需要特别做任何事情来解决性能问题。换句话说,你**是**性能问题,还是**认为**你有性能问题? –

+0

现在,我在一个for循环中执行get-process-repeat。它持续1小时!我认为最多10分钟 –

回答

0

我不能给出更具体的答案,因为它被标记为C#,我不太熟悉该语言。

但是,你可以从多种途径接近这个:

  • 只要做到这一点逐个顺序方式,因为除非你是一个很慢的CPU,磁盘,或有最小的内存限制(如果你是的话,你将不会使用C#!),那么它会比较快地完成。当然,你可以通过以下两条建议使事情变得更加困难:
  • 如果应用程序的I/O绑定更多,那么可以使用C#的等效BSD套接字C select()(ASync)语句,然后仅使用一个线程来分析和连接数据。
  • 按照您的建议操作,为每个文件打开多个线程,解析并序列化这些文件的内容,然后将它们合并到主线程中,以便在所有线程完成时进行后续处理。