Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 诊断在for循环C中花费的时间时出现的问题#_C#_Database_For Loop_Timer_Timing - Fatal编程技术网

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

C# 诊断在for循环C中花费的时间时出现的问题#,c#,database,for-loop,timer,timing,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 <

我有一个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();
Stopwatch proctime=新秒表();
秒表innerlooptime=新秒表();
秒表outerlooptime=新秒表();
proctime.Start();
int length=intable.Rows.Count;
outerlooptime.Start();
for(int i=0;i
如果你把所有的时间都计算出来,花在“内环”或j环上的时间大约是十分之一秒

在i循环中花费的时间,而不是在j循环中花费的时间,大约是十分之一秒

整个循环花费的时间约为1秒。因此,时间iloop+时间jloop大约是总时间的五分之一。剩下的时间花在哪里?查看图像,比较处理时间(代码中的proctime)、outerloop时间和innerloop时间。为什么这些加起来就不是更接近彼此的东西呢


您不显示计时器的声明,但变量名称意味着您查看的是处理器时间,而不是实际花费的时间。处理器时间是处理器核心运行计算所花费的时间量-处理器在计算机上运行的所有进程中共享,因此在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());

我找到了答案。真是太傻了。在函数结束时,我在消息框语句中切换了秒表,因此一个秒表被报告为另一个秒表。所有的时间都花在其他地方,在我发布的代码之外。谢谢你的帮助

在第一个循环外启动outerlooptime,但在循环启动后立即停止?如果使用visual studio,请尝试在启用microsoft符号的情况下运行性能分析器(选项->调试->符号)。cpu配置文件生成的“热路径”应该指示哪些调用占用的时间最多。James,这听起来正是我需要的。谢谢我现在就要试试,Alex,我一直在努力解释,所以这包括了第一次使用int i的声明。在j循环之后,outerloop计时器再次开始计算花费在i++和i<长度逻辑上的时间。它们实际上是秒表,我将proctime标记为循环的处理时间。对不起,我的假设不正确。可能
DataRow newrow=graphdata.newrow()
占用了很多时间-两个循环中似乎都没有计算它。实例化对象所花费的时间是不可忽略的。。。