需求是要拿一条数据和缓存的数据做比对,得到结果,但是数据量很大导致速度很慢
目前解决方案是下面代码这样,OneCompareTaskCount 是开启的线程数量,onceCompareCount每个线程处理数据量,newList是总的数据集
大概400万条数据计算了有4分钟,请问有没有更好的方法提高效率
for (int i = 0; i < OneCompareTaskCount ; i++)
{
int temp_i = i;
ManualResetEvent mre = new ManualResetEvent(false);
manualEvents.Add(mre);
ThreadPool.QueueUserWorkItem((object obj) =>
{
int _start = temp_i * onceCompareCount,
_end = temp_i == OneCompareTaskCount - 1 ? newList.Count : (temp_i + 1) * onceCompareCount;
Parallel.For(_start, _end, (j) =>
{
// 计算并保存结果
});
mre.Set();
}, mre);
}
WaitHandle.WaitAll(manualEvents.ToArray());
3条回答 默认 最新
- wanghui0380 2021-09-28 08:27关注本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报qq_40580931 2021-09-28 09:07
简单的说,一个简单的int数据集合list 里面有400万个数(内存中已经存在,不需要另外查询),现在我要用1去和所有的数相加,结果保存到另一个List里面,单纯的多开几个线程循环计算速度达不到要求,所以想问一下各位大佬有没有好点的解决方案,而且我对线程的运行规则也不是很清楚,只要电脑能带动是开的越多越好吗?
赞回复