如何在插入多个数据时加快时间?
我从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);
}
那么,有没有办法一次插入列表?有任何想法如何加快这项行动?
答案 0 :(得分:3)
可能会导致性能问题的原因不同。您使用的是存储过程,它比在c#端使用sql语句更快。然而;为每一行创建连接也会很昂贵。您应该考虑保留单个连接并执行插入(请记住以避免连接超时)。如果您能够忽略存储过程,则应遵循批量插入选项(如SqlBulkCopy),或者甚至可以构建自定义SQL插入语句,例如每个插入语句1000个项目。
由于你声明&#34;有时这个操作需要很多时间&#34;,问题可能是数据库服务器负载,重量,触发器等。你应该避免使用过多的触发器和constaints,这可能会导致巨大的性能的问题。如this post中提到的那样,您可以通过临时转动约束来检查它。