2017-04-15 29 views
-3

我的C#蠻力程序在運行時使用20%的CPU。我只使用1 Backgroundworker。如果我將這個任務分成幾個部分並將其插入到7-8個背景工作者中,那麼速度會更快,並且使用更多的CPU?幾個BackgroundWorkers的蠻力更快?

+1

你試過嗎? – Fabio

+0

還沒有。但也許你們中的任何人都可以在我嘗試之前給我一個答案。 – KotMaster

+2

@AxelKemper不是必需的,即20%的CPU使用率可以很容易地是單核的整體... –

回答

1

簡短的答案也許。

長的答案是,這取決於多種因素:

  1. 是您的任務CPU綁定,如果它不是CPU阻礙了任務,然後多線程可能不會幫助。

  2. 多少個內核確實你的處理器已經和它有超線程:如果只有一個線程,試圖多線程實際上會慢下來;如果它有更多的話,你可以在你的程序中使用盡可能多的線程,就像你在OS中可用的那樣。 (我建議你使用Environment.ProcessorCount值來確定你開始的線程數)。

  3. 需要發生多少交叉線程同步。如果您的線程正在等待寫入鎖定的共享變量或在它們之間傳遞數據,那麼它可能會減慢應用程序的速度。

我的主要建議是要測試一下吧!

你可以很容易的時間代碼段的執行時間相當精確地使用直觀Stopwatch類。

最後,你可能想使用Thread[]而不是背景的工人,一般要嘗試,這些有較低的費用等等都稍快。

+0

謝謝。目前正在測試它... – KotMaster

+1

使用分析器,例如ANTS Performance Profiler或VS內置的功能還有助於理解性能。 –

0

我測試了單詞「堆棧」。一次只有1個Backgroundworker,第二次使用5. Backgroundworker 1搜索長度爲1的單詞。background worker 2用於長度爲2的單詞等等。

Word: stack 
Backgroundworker Time 
1     1min 8sec 
5     35sec