2017-04-15 30 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