3

我需要从我的 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 秒。

我想知道为什么会这样?

4

2 回答 2

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));

如果要测量每次迭代的时间,请使用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));
}
于 2013-02-14T14:34:59.207 回答
2

如果要测量每次更新的时间,则必须dbWatch.Reset()在循环结束或开始时调用。Restart()我假设它是一个System.Diagnostics.Stopwatch. 请参阅MSDN - 秒表

于 2013-02-14T14:34:27.210 回答