我有一个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),外循环时间和内循环时间。为什么那些人不能相互接近?
答案 0 :(得分:1)
您不会显示计时器的声明,但变量名称意味着您正在查看处理器时间,而不是实际花费的时间。处理器时间是处理器核心运行计算所花费的时间 - 处理器在计算机上运行的所有进程之间共享,因此在1秒内,接收0.2秒的处理器时间是完全合理的。
请尝试使用秒表类:
// using System.Diagnostics;
Stopwatch sw = new Stopwatch();
sw.Start();
DoThings(); // run your code
sw.Stop();
Debug.WriteLine("Actual time elapsed: " + sw.Elapsed.ToString());
答案 1 :(得分:0)
我想出了答案。真的很傻。我在功能结束时的消息框语句中切换了秒表,因此一个秒表被报告为另一个秒表。在我发布的代码之外,所有的时间都花在其他地方。感谢您所有的帮助。