C#任务没有性能提升?

Asl*_*han 0 .net c# c#-4.0

我使用如下的Task,但没有性能提升.我检查了我的方法,该方法在0-1秒内执行但是使用任务(30个任务),需要5-12秒.如果我犯了任何错误,任何人都可以指导.我希望运行30个并行,并期望在最多2秒内完成30个.

这是我的代码:

Task[] tasks = new Task[30];
for (int p = 0; p <= dstable.Tables[0].Rows.Count - 1; p++)
{
    MethodParameters newParameter = new MethodParameters();
    newParameter.Name = dstable.Tables[0].Rows[p]["Name"].ToString();

    tasks[p] = Task.Factory.StartNew(() => ParseUri(newParameter));
    Application.DoEvents();
}
try
{
    Task.WaitAll(tasks);
    //Console.Write("task completed");
}
catch (AggregateException ae)
{
    throw ae.Flatten();
}
Run Code Online (Sandbox Code Playgroud)

hel*_*low 8

你的想法有一些重大问题.

  1. 你的电脑有30个核心,这样每个核心都可以完成一项任务吗?我不这么认为
  2. 开始一个单独的线程也需要一些时间.
  3. 每个并发线程产生更多开销.
  4. 通过启动更多线程可以更快地解决您的问题吗?只有这样,当所有线程执行不同的任务时,例如从磁盘读取,查询数据库,计算某些内容等.在cpu上执行所有"高性能"任务的10个线程不会提升,完全相反,因为每个线程都需要清理他的混乱,然后才能给下一个线程提供一些cpu时间,并且那个人也需要清理他的烂摊子.

请查看此链接 http://msdn.microsoft.com/en-us/library/ms810437.aspx

您可以使用TPL http://msdn.microsoft.com/en-us/library/dd460717.aspx

他们试图保证并行线程的最大效果.我也推荐这本书 http://www.amazon.com/The-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916

如果您真的想在2秒内解决问题,请购买更多CPU电量;)