如何优化和加快此操作

时间:2016-04-21 23:18:36

标签: c# parallel-processing

var dayy = 1;

$(".buttonSix").click(function() {
  dayy--;
  console.log(dayy);
});

$(".buttonSeven").click(function() {
  dayy++;
  console.log(dayy);
});


switch (dayy)
{
  case 0:
    var dayy = 1;
    break;
  case 1:
    break;
  case 2:
    $(".fist").fadeOut();
    $(".second").fadeOut();
    $(".third").fadeIn();
    $(".fourth").fadeIn();
    break;
  case 3:
    $(".third").fadeOut();
    $(".fourth").fadeOut();
    $(".fith").fadeIn();
    $(".sicth").fadeIn();
    break;
  case 4:
    $(".fith").fadeOut();
    $(".sicth").fadeOut();
    $(".seventh").fadeIn();
    $(".eight").fadeIn();
    break;
  case 5:
    $(".seventh").fadeOut();
    $(".eight").fadeOut();
    $(".nineth").fadeIn();
    $(".tenth").fadeIn();
    break;
  case 6:
    $(".nineth").fadeOut();
    $(".tenth").fadeOut();
    $(".eleventh").fadeIn();
    $(".twelve").fadeIn();
    break;
  case 7:
    $(".eleventh").fadeOut();
    $(".twelve").fadeOut();
    $(".thirteenth").fadeIn();
    $(".fourteenth").fadeIn();
    break;
  default:
    $(".thirteenth").fadeOut();
    $(".fourteenth").fadeOut();
    $(".first").fadeIn();
    $(".second").fadeIn();
    var dayy = 1;
    break;
}

现在在这个操作中 - 我得到一个客户对象列表,可以是数千个,然后逐个保存数据库中的每个客户对象。 有没有一种方法可以加速或使其平行以实现真正的性能和正确的结果。

2 个答案:

答案 0 :(得分:1)

创建一个存储过程,将许多客户作为参数。与所有客户一起调用此程序一次。一个网络命中。

答案 1 :(得分:1)

List<Customer> customers = GetCustomers("ACT");
Task[] tasks = new Task[MaxNumOfConcurrentSaves];
While(customers.Length > 0)
{
     for(int i = 0; i < MaxNumOfConcurrentTasks; i++){
            tasks[i] = SaveCustomerData(customers[i]);
            customers[i] = null;
     }
     customers = List.FindAll<Customer>(customers, aCust => !(aCust == null));
     Task.AwaitAll(tasks)
}

好的,所以这里发生了什么(你必须为你的用途完善它):虽然我们在列表中有客户,但是从开始到最大数量的每个客户并发任务,启动任务以保存并将该客户设置为null。然后,在for循环结束后,找到列表中不为空的所有客户条目并保留它们并等待任务完成。如果列表中没有任何内容,则循环结束并且保存过程完成。 SaveCustomerData将返回执行实际保存代码的任务。

如果有人发现此代码存在问题,请编辑或引起我的注意。我没有以这种身份测试它,但它类似于我已经完成的工作。

编辑:

我最近在.Net 4.5中发现了一些令人惊奇的事情(可能还有4个,不确定)

List<Customer> customers = GetCustomers("ACT");
Parallel.ForEach(customers, (currentCustomer) => SaveCustomerData(currentCustomer))

同样的事情,多线程在一行。