加速插入 - 立即插入列表

时间:2017-07-13 11:59:26

标签: c# mysql sql performance

如何在插入多个数据时加快时间?

我从excel获取数据并将其存储在List中。在我的循环中,我为每一行打开连接,然后用Insert函数关闭。插入函数逐行插入数据。有时这个操作需要花费很多时间。像我这样的插入循环

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    if (cmpList.Count == 0)
    {
        MessageBoxHelper.ShowError("List can not be inserted");
        return;
    }

    foreach (var item in cmpList)
    {
        item.StartDate = dpStart.SelectedDate.Value;
        item.FinishDate = dpFinish.SelectedDate.Value;
        item.Insert();
    }

    MessageBoxHelper.ShowInformation("List was inserted successfully!");
    comboCampaignType.IsEnabled = true;
}

我为excel中的所有行创建cmpList,如此

for (int i=0; i<excelRowCount; i++)
{
    Campaign cmp = new Campaign();
    cmp.Type = 1;
    cmp.PriceP.Amount = double.Parse((string)sheet.GetRow(row).GetCell(1).Value, CultureInfo.InvariantCulture);
    cmp.PriceV.Amount = double.Parse((string)sheet.GetRow(row).GetCell(1).Value, CultureInfo.InvariantCulture);
    cmp.PriceP.Currency = (string)sheet.GetRow(row).GetCell(2).Value;
    cmp.PriceV.Currency = (string)sheet.GetRow(row).GetCell(2).Value;
    cmp.MinOrder = Convert.ToDouble((string)sheet.GetRow(row).GetCell(3).Value);
    cmpList.Add(cmp);
}

那么,有没有办法一次插入列表?有任何想法如何加快这项行动?

1 个答案:

答案 0 :(得分:3)

可能会导致性能问题的原因不同。您使用的是存储过程,它比在c#端使用sql语句更快。然而;为每一行创建连接也会很昂贵。您应该考虑保留单个连接并执行插入(请记住以避免连接超时)。如果您能够忽略存储过程,则应遵循批量插入选项(如SqlBulkCopy),或者甚至可以构建自定义SQL插入语句,例如每个插入语句1000个项目。

由于你声明&#34;有时这个操作需要很多时间&#34;,问题可能是数据库服务器负载,重量,触发器等。你应该避免使用过多的触发器和constaints,这可能会导致巨大的性能的问题。如this post中提到的那样,您可以通过临时转动约束来检查它。