2017-04-15 4 views
-3

私のC#Brute Forceプログラムは、実行時にCPUの20%を使用します。 Imは1人のBackgroundworkerを使っています。この作業をいくつかの部分に分けて、7-8のBackgroundworkersに挿入すれば、それは速くなり、より多くのCPUを使用するでしょうか?複数のBackgroundWorkersのブルートフォースが速くなっていますか?

+1

試しましたか? – Fabio

+0

まだありません。しかし、多分あなたの誰かが私が試みる前に私に答えを与えることができます。 – KotMaster

+2

@AxelKemper必ずしもそうでなくても、その20%のCPU使用率は簡単に1つのコア全体になる可能性があります... –

答えて

1

短い答えは多分です。

長い答えは、それは複数の要因に依存することである:

  1. は、あなたのタスクのCPUがバインドされている、それはタスクを保持するCPUではないならば、マルチスレッドはおそらく助けにはなりません。

  2. あなたのプロセッサにはいくつのコアがあり、ハイパースレッディングが有効になっていますか?スレッドが1つしかない場合は、マルチスレッドを試みると速度が遅くなります。それ以上のものがあれば、OSで利用可能な数のスレッドをプログラム内で使用できます。 (開始するスレッドの数を確認するには、Environment.ProcessorCountの値を使用することをお勧めします)。

  3. スレッド間の同期をどのくらい行う必要がありますか。あなたのスレッドがロックされた共有変数への書き込みを待機しているか、それらの間でデータを渡していると、アプリケーションが遅くなる可能性があります。

私の主な提案は、テストすることです!

直感的なStopwatchクラスを使用すると、コードセグメントの実行時間をかなり正確に計測できます。

最後に、バックグラウンドワーカーではなくThread[]を使用してみるとよいでしょう。一般に、これらはオーバーヘッドが低く、少し速いです。

+0

ありがとうございます。現在、私はそれをテストしています... – KotMaster

+1

ANTS Performance ProfilerまたはVS組み込みのものも、パフォーマンスの理解に役立ちます。 –

0

「スタック」という単語をテストしました。バックグラウンドワーカー1は長さ1の単語を検索します。背景ワーカー2は長さ2の単語のように続きます。

Word: stack 
Backgroundworker Time 
1     1min 8sec 
5     35sec 
関連する問題