2011-11-14 37 views
0

我正在開發和維護.NET 3.5工具,並且想知道是否可以通過使用.NET 4的新TPL或甚至新的異步獲得潛在的性能收益功能仍然在CTP中。異步和Parallel.ForEach對IO操作的潛在好處

該工具的工作大致可以描述爲:

  1. 檢索的容器文件(目前.MSI文件)的列表 - 每一個文件的數十人,50〜70〜
  2. 迭代,並構建一個表示它的運行時對象。
  3. 對於創建的每個運行時對象,請對其內容執行一些查詢(將其內容與系統上的某些文件進行比較)。

項目#2,#3是漫長的,我想用Parallel.ForEach或其他方法來獲得改善的執行時間(這是一個幾分鐘現在)的潛在若干意見並行執行這項工作。

潛在的改進我很預見是:

利用多個CPU /內核 保持運行的同時IO操作(如讀取文件)正在做做別的事情的應用程式。

您是否認爲這種應用程序可以從這些方面受益,然後才能進入開發階段?

回答

3

我會運行一個分析器來查看你的應用程序花費的時間,然後決定。如果您發現它正在等待I/O完成,那麼您可能會從使用Asynchronous Programming Model中獲益。如果您發現自己受到計算限制,那麼根據您預期的運行時環境(多核/單核),您可能會發現多線程計算是有益的。當然,你可能會發現這兩種情況都適用。

順便提一下,您還可以使用Reactive Extensions在.NET 3.5中使用許多.NET 4線程功能。我目前在一個高效的.NET 3.5應用程序中使用它。

3

這絕對可以通過使用第三方物流,這是現在可以在.NET 4

的三步都可能被設計成並行運行得到了一些改進。

這就是說,鑑於上述情況,很難知道你會看到多少改進。主要問題是繁重的文件I/O。即使您利用多個內核,磁盤I/O也可能成爲瓶頸,並且嘗試並行運行它可能實際上減慢了代碼的這些部分。

如果您在查詢/計算方面做了大量的IO,那麼僅通過並行運行例程就可能不會獲得非常大的性能優勢。

+0

好的答案,看到你在299,999K並投票支持你。 +1 :-) – OmegaMan

+0

@OmegaMan謝謝! –

1

您是否認爲這種應用程序可以從這些方面受益,然後才能進入開發階段?

不是很多。您描述了一個三階段系統,其中每個階段都嚴重受I/O限制。

我假設你只有1個磁盤,這意味着並行運行甚至可以減慢速度(更多的尋求操作)。

另一方面,階段2)和3)可能是CPU密集型的,足以看到一些改進。

您必須照常測量。

+0

那就是我害怕的。我將嘗試對其進行分析以獲取更多數據。 –