对几个BackgroundWorkers的蛮力更快?

时间:2017-04-15 17:17:30

标签: c# cpu backgroundworker brute-force

我的C#Brute Force程序在运行时使用20%的CPU。我只使用1个Backgroundworker。如果我将这个任务分成几个部分并将它们插入到7-8个背景工作者中,那会更快并且使用更多的CPU吗?

2 个答案:

答案 0 :(得分:1)

简短的回答可能是。

答案很长,这取决于多种因素:

  1. 你的任务CPU是否绑定,如果不是CPU阻止任务,那么多线程可能无济于事。

  2. 您的处理器拥有多少内核并且启用了超线程:如果它只有一个线程,尝试多线程实际上会降低它的速度;如果它有更多,您可以在程序中使用尽可能多的线程。 (我建议你使用Environment.ProcessorCount值来确定你开始的线程数。)

  3. 必须进行多少跨线程同步。如果你的线程花了很长时间等待写入锁定的共享变量或在它们之间传递数据,那么它可能会减慢你的应用程序。
  4. 我的主要建议是测试它!

    使用直观的Stopwatch类,您可以轻松准确地计算一段代码的执行时间。

    最后,你可能想尝试使用Thread[]而不是后台工作者,一般来说,这些工作开销较低,所以稍快一点。

答案 1 :(得分:0)

我测试了“堆栈”这个词。一次只有1个背景工作者第二次用5.背景工作者1搜索长度为1的单词。背景工作者2用于长度为2的单词,依此类推。

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