当前位置: 代码迷 >> C# >> 如何提升循环的速度呢
  详细解决方案

如何提升循环的速度呢

热度:50   发布时间:2016-05-05 04:58:32.0
怎么提升循环的速度呢
需求是和排列组合相关的,
大概就是在40个数字中选12个数字,对每种组合都要做一个较为复杂的判断,光是组合的种类数就有110亿次,把所有的组合都循环判断完要大概10多个小时,怎么才能提高循环的效率呢,代码比较复杂,就不上了
------解决思路----------------------
两点建议:
充分利用并行处理,例如.Net中的ParallelFor
优化数据判断算法
如果还不能满足要求,可以考虑使用C++ Amp进行超大并发处理,AMP的性能相当优越
------解决思路----------------------
写了一个稍微优化的组合算法,单纯计算索引。我这2.66G的i7 CPU单线程计算C(40, 12),迭代5586853480个索引是34.3s左右

显然组合算法不是瓶颈,你可以分别测试下你的组合算法耗时,和那个“较为复杂的判断”的耗时。确定下平均1s分别能执行多少次。当然组合算法可以并发,不过这个规模意义不是很大。判断看起来比较慢,最好能并行计算。

因为循环次数非常多,循环内部每一次计算、存取值、调用、分配内存都会累积出很大影响。所以需要尽量减少各种不必要的计算、存取值、调用,尤其是分配内存,这是最最慢的,需要极力避免。

方法调用带来的开销也很可观。我的组合算法,如果inline调用,是34.3s,不inline是46s左右。
  相关解决方案