我想分析方法Tuple<A,B,C,D> Calculate()
的执行时间。
我所做的是以下内容:
Tuple<A, B, C, D, E>
Calculate(Line l, Path p)
{
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
var rv = Calculate2(l, p);
System.Diagnostics.Debug.WriteLine($" stopwatch.ElapsedMilliseconds} ms;");
}
return rv;
}
Tuple<A, B, C, D, E>
Calculate2(Line l, Path p)
{
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
A a = ...; B b = ...; C c = ...; D d = ...; E e = ...
... content of this method
System.Diagnostics.Debug.WriteLine($" stopwatch.ElapsedMilliseconds} ms;");
return Tuple.Create(a,b,c,d,e);
}
第一次测量给出28 ms,第二次测量仅给出8 ms(每次)
这是否意味着return statement
需要20毫秒?
我觉得这不可能相信......?
这不是Tuple
- 问题:我尝试了一个struct tuple和一个显式类,结果完全相同。
EDIT
我在课堂上添加了一个静态秒表,发现在Calculate2(..)
入口处,静态秒表显示延迟时间为20毫秒。
我想知道这是否与JIT对该方法的补充有关 我在第一次运行后又添加了第二次运行,并没有显示延迟 事实上,延迟是对该功能的第一次调用,出于其他原因,我认为第一次是瓶颈。
答案 0 :(得分:-1)
Stopwatch sw = new Stopwatch();
sw.Start();
//do some work
Thread.Sleep(TimeSpan.FromSeconds(30));
sw.Stop();
var totalTimeElapsed = sw.Elapsed.TotalMilliseconds;
var milSecs = sw.ElapsedMilliseconds;
您需要使用Elapsed.TotalMilliseconds而不是ElapsedMilliseconds。 你可以找到一个很好的解释here
ElapsedMilliseconds可能会给您带来意想不到的结果。