2017-03-17 132 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)語句,然後僅使用一個線程來分析和連接數據。
  • 按照您的建議操作,爲每個文件打開多個線程,解析並序列化這些文件的內容,然後將它們合併到主線程中,以便在所有線程完成時進行後續處理。