C#Task.WaitAll慢,有其他选择吗
我使用c#对数据库表进行数据处理,每个循环处理大约3000个员工数据。 每个员工大约需要2秒钟才能完成 这意味着时间太长(2*3000=6000秒/圈) 所以我们决定使用.net线程,但Task.WaitAll仍然面临同样的速度 任何想法,任何选择,如何在同一时间完成?或者比这更快的时间 这是我们的服务代码 我的算法是这样的C#Task.WaitAll慢,有其他选择吗,c#,.net,multithreading,task-parallel-library,C#,.net,Multithreading,Task Parallel Library,我使用c#对数据库表进行数据处理,每个循环处理大约3000个员工数据。 每个员工大约需要2秒钟才能完成 这意味着时间太长(2*3000=6000秒/圈) 所以我们决定使用.net线程,但Task.WaitAll仍然面临同样的速度 任何想法,任何选择,如何在同一时间完成?或者比这更快的时间 这是我们的服务代码 我的算法是这样的 获取所有新员工操作 /// seperate tasks List<Task> tasks = new List<Task>();
/// seperate tasks
List<Task> tasks = new List<Task>();
foreach (Helper.Employeedata employee in employees)
{
Task t = Task.Factory.StartNew(() =>
{
employee.loadActions();
});
tasks.Add(t);
}
Console.WriteLine("Waiting ...");
Task.WaitAll(tasks.ToArray());
/// seperate tasks
List<Task> tasks = new List<Task>();
foreach (Helper.Employeedata employee in employees)
{
Task t = Task.Factory.StartNew(() =>
{
employee.loadActions();
});
tasks.Add(t);
}
Console.WriteLine("Waiting ...");
Task.WaitAll(tasks.ToArray());
///分离任务
列表任务=新列表();
foreach(雇员中的Helper.Employeedata雇员)
{
Task t=Task.Factory.StartNew(()=>
{
employee.loadActions();
});
任务。添加(t);
}
控制台。WriteLine(“等待…”);
Task.WaitAll(tasks.ToArray());
如果“loadActions”是CPU密集型的,那么除了升级计算机或重写代码之外,你什么也做不了。你是说
Task.WaitAll
很慢,还是说你在线程中做的工作很慢?您确实意识到,Task.WaitAll
将等待工作完成(因此得名)?其速度与不使用任务一样慢,在同一时间内完成,每个循环超过1小时,我需要减少,因为每个员工需要2秒,但使用任务并没有效果here@Eng-AymanAbdulhamidElarian您在loadActions
中有一些东西不能让它并行运行,如果我们看不到它在做什么,我们无法帮助您。任何其他修改都会有相同的问题,您必须修复loadActions
以允许它并行运行。如果您正在与DB交谈,很可能您只需要在正确的表上建立索引,但除非您向我们展示您正在做的事情,否则我们无法告诉您索引是什么。@Eng AymanAbdulhamidElarian No,您只需从一个任务问3000个问题切换到3000个任务问一个问题,如果您使用Entity Framework,那么批量更新行是很糟糕的,有很多方法可以修复它,但首先您必须向我们展示您是如何保存的,以便我们知道建议什么解决方案!如果它只是cpu,那么他会看到时间的减少——但如果并行与否,它需要相同的时间。所以cpu不是原因cpu不是原因我在一个强大的服务器上测试它