诊断在for循环中花费的时间的问题C#

时间:2017-02-03 18:49:57

标签: c# database for-loop timer timing

我有一个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),外循环时间和内循环时间。为什么那些人不能相互接近?

enter image description here

2 个答案:

答案 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)

我想出了答案。真的很傻。我在功能结束时的消息框语句中切换了秒表,因此一个秒表被报告为另一个秒表。在我发布的代码之外,所有的时间都花在其他地方。感谢您所有的帮助。