2015-01-09 82 views
0

我在C#中有一個應用程序,涉及很多文件操作,即讀取,移動,刪除,附加等。例如,從本地FS上的源路徑讀取文件並處理,從那裏刪除,處理後的文件被寫入本地FS的目標位置。這一切都是在一組系統上並行完成的,每個系統只在本地文件上工作。 (文件由負載均衡器分配)優化文件操作

我該如何提高此應用程序的性能?我能想到的

事情是:

1)創建一個特定類型的操作的隊列,如刪除。將所需信息放入隊列中,並且一個單獨的線程將處理隊列。

2.)不使用FS,而是使用內存數據存儲,如Redis。由於數據將在緩存中,操作將會更快。

3.)增加代碼的並行性。每個線程將在單獨的文件上工作,並且應該更快。

上述方法是否可行?請提出任何其他值得思考的替代方案。

+0

除非您有多個物理硬盤驅動器,否則並行性對您沒有任何好處。告訴驅動器同時做3件事只會涉及2個等待第一個完成的事情,而不是3倍的加速。 – Servy 2015-01-09 22:03:33

+0

@Servy,所以你說只有一個操作可以在物理硬盤上實際發生,儘管這些操作完全涉及不同的文件。 – ptntialunrlsd 2015-04-15 21:53:13

+1

@ptntialunrlsd硬盤驅動器只有一個磁頭,所以是的,除非您有多個驅動器,否則它一次只能讀/寫一個文件。你正在操縱多個文件不會改變這一點。 – Servy 2015-04-16 12:29:51

回答

0

1.)我會建議將共同的上下文操作進行批處理,以減少同步\上下文切換開銷並利用您的處理器的緩存機制。 2.)將文件一起分組到一個文件將減少Windows的握手每個文件的性能損失。 3.)嘗試使用指針和\或Win32 API,這在很多情況下似乎比其託管的wrappers \ lib實現更快。 4.)阻止收集隊列(生產者消費者)可能是一個很好的起點。