【发布时间】:2017-02-03 18:49:57
【问题描述】:
我有一个 for 循环太长了,我不知道为什么。
Stopwatch proctime = new Stopwatch();
Stopwatch innerlooptime = new Stopwatch();
Stopwatch outerlooptime = new Stopwatch();
proctime.Start();
int length = inbtable.Rows.Count;
outerlooptime.Start();
for (int i = 0; i < length; i++)
{
outerlooptime.Stop();
DataRow newrow = graphdata.NewRow();
innerlooptime.Start();
for (int j = 0; j < graphdata.Columns.Count; j++)
{
colname = graphdata.Columns[j].ColumnName;
newrow[j] = inbtable.Rows[i][colname];
}
innerlooptime.Stop();
outerlooptime.Start();
graphdata.Rows.Add(newrow);
}
proctime.Stop();
如果你把它全部计时,只花在“内循环”或 j 循环上的时间大约是 1/10 秒。
在 i 循环而不是 j 循环中花费的时间大约是 1/10 秒。
整个循环花费的时间约为 1 秒。所以 Time-iloop + Time-jloop 是总时间的 1/5。剩下的时间都花在了哪里?看一下图像,比较处理时间(代码中的proctime),外循环时间和内循环时间。为什么不把它们加起来更接近彼此?
【问题讨论】:
-
你在第一个循环之外开始outerlooptime,但是一旦循环开始就停止它?
-
如果您使用的是 Visual Studio,请尝试在启用 microsoft 符号的情况下运行性能分析器(选项 -> 调试 -> 符号)。 cpu 配置文件生成的“热路径”应指示哪些调用占用的时间最多。
-
James,这听起来正是我所需要的。谢谢!我马上去试试
-
Alex,我一直在努力解释,所以这包括 int i 的声明。在 j 循环之后,外循环计时器再次启动,以计算在 i++ 上花费的时间和 i
标签: c# database for-loop timer timing