在C#中并行while循环

时间:2014-04-04 13:31:17

标签: c# parallel-processing while-loop

我尝试编写BBS生成器。但是这台发电机太慢了。所以我需要并行。但我不知道怎么做。请帮我:)。

 public static List<BigInteger> GenerateFullCycle(long N, long x0)
{ 
              List<BigInteger> randomNumbers = new List<BigInteger>();
              var bbs = new BBS_generator(N, x0);
              BigInteger rvalue = bbs.Generate();
              while(randomNumbers.Contains(rvalue) == false)
              {
                randomNumbers.Add(rvalue);
                rvalue = bbs.Generate();
              }
              return randomNumbers;
       }

2 个答案:

答案 0 :(得分:0)

您可能希望首先考虑改进算法。 randomNumbers列表有多大? Contains在较大的列表上相当慢。您可能希望改为使用HashSet

BBS很慢,就这么简单。使用BigInteger实际上没有任何帮助 - 也很慢。

除此之外,没有办法并行化这段代码。循环的第二次迭代取决于第一次,第三次取决于第二次等等。你可以自己并行化GenerateFullCycle调用,但这就是它。

并行化不是解决所有问题。很多东西根本不可并行化 - 你通过并行化获得了多少?快两倍?即使你设法完全分离并以100%的效率运行,4核CPU仍然只意味着你的速度是你的四倍。没错,它确实有它的应用程序,但我没看到它如何帮助BBS生成器。

性能调整的头号规则 - 个人资料。您的应用实际在哪里花费时间?

答案 1 :(得分:0)

也许你可以使用类似后台工作者的东西: http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx