在c#和sql中更新循环中的记录性能

在c#和sql中更新循环中的记录性能,c#,sql,performance,foreach,C#,Sql,Performance,Foreach,我需要从C#中的应用程序更新数据库中的100条记录 我使用了foreach语句并调用了存储过程来更新每个记录,如下所示: foreach (var record in recordList) { dbWatch.Start(); DbService.UpdateRecord(Id, ProcessDate, MessageID, task.Result.Email.TryTimes); dbWatch.Stop(); LogMessage(string.For

我需要从C#中的应用程序更新数据库中的100条记录

我使用了foreach语句并调用了存储过程来更新每个记录,如下所示:

foreach (var record in recordList)
{  
    dbWatch.Start();
    DbService.UpdateRecord(Id, ProcessDate, MessageID, task.Result.Email.TryTimes);
    dbWatch.Stop();
    LogMessage(string.Format("Single database row update toke:{0}",dbWatch.Elapsed));
}
一切正常,只是当它开始时,更新每个记录大约需要00:00:00.00123343,但是随着它更新的越来越多,它需要越来越多的时间。在将近1000条记录之后,更新每条记录大约需要00:00:04秒


我想知道为什么会这样?

如果要测量每次更新的时间,必须在循环结束时调用
dbWatch.Reset()
,或者在开始时调用
Restart()
。我假设它是一个
系统.诊断.秒表

请参阅。

我认为这只是一个不正确的测量值。循环不会重新启动秒表,它只是连续启动和停止。因此,
经过的时间总是会增加

如果要测量整个时间,请执行以下操作:

dbWatch.Start();
foreach (var record in recordList)
{  
    DbService.UpdateRecord(Id, ProcessDate, MessageID, task.Result.Email.TryTimes);
}
dbWatch.Stop();
LogMessage(string.Format("All updates took:{0}",dbWatch.Elapsed));
如果要测量每次迭代的时间,请使用:


什么是dbWatch?调用.Start()之前是否必须重置它?鉴于您的记录列表可能来自另一个查询,如果可能,请寻找执行一次更新的方法,而不是将数据带回应用程序并在其中循环。顺便问一下,是否希望您永远不要使用循环变量
record
来更新数据库?
foreach (var record in recordList)
{  
    dbWatch.Restart();
    DbService.UpdateRecord(Id, ProcessDate, MessageID, task.Result.Email.TryTimes);
    dbWatch.Stop();
    LogMessage(string.Format("Single database row update took:{0}",dbWatch.Elapsed));
}