我的C#Brute Force程序在运行时使用20%的CPU。我只使用1个Backgroundworker。如果我将这个任务分成几个部分并将它们插入到7-8个背景工作者中,那会更快并且使用更多的CPU吗?
答案 0 :(得分:1)
简短的回答可能是。
答案很长,这取决于多种因素:
你的任务CPU是否绑定,如果不是CPU阻止任务,那么多线程可能无济于事。
您的处理器拥有多少内核并且启用了超线程:如果它只有一个线程,尝试多线程实际上会降低它的速度;如果它有更多,您可以在程序中使用尽可能多的线程。 (我建议你使用Environment.ProcessorCount
值来确定你开始的线程数。)
我的主要建议是测试它!
使用直观的Stopwatch
类,您可以轻松准确地计算一段代码的执行时间。
最后,你可能想尝试使用Thread[]
而不是后台工作者,一般来说,这些工作开销较低,所以稍快一点。
答案 1 :(得分:0)
我测试了“堆栈”这个词。一次只有1个背景工作者第二次用5.背景工作者1搜索长度为1的单词。背景工作者2用于长度为2的单词,依此类推。
Word: stack
Backgroundworker Time
1 1min 8sec
5 35sec