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

Mas*_*aei 3 c# sql performance foreach

我需要从C#中的应用程序更新数据库中的100条记录.我使用了foreach语句并调用了storde proc来更新每个记录,如下所示:

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));
}
Run Code Online (Sandbox Code Playgroud)

一切都运行正常,除了当它开始时,它需要大约00:00:00.00123343更新每条记录,但随着它的更新越来越多,它需要越来越多.在将近1000条记录之后,大约需要00:00:04秒来更新每条记录.

我想知道为什么会这样?

Tim*_*ter 9

我认为这只是一个不正确的测量.你的循环没有重启StopWatch,它只是启动并连续停止.所以Elapsed总会增加.

如果要测量整个时间:

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));
Run Code Online (Sandbox Code Playgroud)

如果要测量每次迭代的时间,请使用StopWatch.Restart:

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));
}
Run Code Online (Sandbox Code Playgroud)