2010-06-04 46 views
6

我被要求展示Parallelism的好處和侷限性,並評估它在我們公司內的使用。我們主要是面向數據的業務,實質上是從數據庫加載對象,然後通過一些業務邏輯,向用戶顯示,然後保存回數據庫。在我看來,這條管線中沒有太多的東西可以從平行運行中受益,但是對於這個概念來說相當新穎,我可能完全錯誤。那個簡單的管線的任何部分是否會從並行運行中受益?有沒有關於如何實現這種編程風格的指導方針?.Net中的並行性

此外,是否有任何工具(最好是VS2010附帶的)能夠顯示瓶頸出現的位置,並且能夠直觀地顯示當我單擊「運行」一個簡單的應用程序時發生了什麼事情循環(預寫簡單的數學循環,例如我爲整數= 1到1000 - 做一些計算)並行,然後串聯?

我需要能夠使用一個體面的分析工具顯示差異。

回答

4

是的,即使是從簡單的模型,你可以極大受益於平行性。

例如說,你的數據的加載過程中,你正在做這樣的事情:

Parrallel.ForEach(someDataSet, datarow => 
{ 
    //put your data into some business objects here 
}); 

這可能:

foreach(var datarow in someDataSet) 
{ 
    //put your data into some business objects here 
} 

你可以做這樣的事情與parrallelism優化這個根據您在此處處理的數據量大大提高您的性能。

現在,每個數據行將被異步處理,而不是像典型的foreach循環那樣按順序處理。

我對你的建議是在一個簡單的例子上運行一些簡單的性能測試,看看你得到了什麼樣的結果。用電子表格或其他方式繪製出來,然後展示給你的團隊。你可能會對你得到的結果感到驚訝。

+0

謝謝@約瑟夫。我曾想知道Parallel.ForEach是否會改善對象的簡單循環。我創建了一個應用程序,根據我創建的一些循環繪製出時間結果,並根據要運行的核心運行這些循環,以及是否以並行方式運行並在.Net 4.0 VS2010圖表中顯示這些循環。然而,我的老闆希望我使用現有的分析工具來展示幕後發生的事情。有沒有一種工具可以有效地顯示這一點? – Ben 2010-06-04 11:14:26

+0

@Ben ANTS Profiler是檢查性能的好工具,但它只是其中之一。事實上,有關於性能工具的問題可能會爲您提供更完整的列表。 – Joseph 2010-06-04 13:50:48

1

通過實現緩存層(分佈式或其他方式)而不是平行化當前管道,您可能會從中受益更多。

使用緩存層,您經常使用的對象將駐留在內存中緩存中,從而實現更高的讀/寫性能。有許多選項可以使緩存保持同步,並且這些選項會根據您選擇的供應商而有所不同。

我建議看看MemCachedNCache,看看你是否認爲他們會很好。

編輯:據剖析工具去,我已經廣泛使用dotTrace,並強烈推薦它。您可以從JetBrains網站下載30天的試用版。

1

可能,但我對這種查詢的一般反應通常是 - 你的應用程序中有任何性能問題嗎?如果是,那麼通過一切手段調查爲什麼並考慮並行執行是否有幫助。如果不是,那麼時間可能是最好的花在別處。