即使在算法分析和Big-Oh方面检查代码的性能也很好!符号我想看看代码在我的电脑中执行需要多少。我已经将List初始化为9999count并从中删除了偶数元素。遗憾的是,执行此操作的时间似乎是0:0:0
。对结果感到惊讶,我执行时间的方式肯定有问题。 有人可以帮我解释代码的正确性吗?
IList<int> source = new List<int>(100);
for (int i = 0; i < 9999; i++)
{
source.Add(i);
}
TimeSpan startTime, duration;
startTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
RemoveEven(ref source);
duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startTime);
Console.WriteLine(duration.Milliseconds);
Console.Read();
答案 0 :(得分:6)
最适合使用的内容是Stopwatch
- 任何涉及TimeSpan
的内容都无法接近足够精确:
var watch = Stopwatch.StartNew();
// something to time
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);
然而,现代CPU非常快,如果可以在那段时间内删除它们,我也不会感到惊讶。通常,对于计时,您需要重复操作很多次才能获得合理的测量。
除此之外:ref
中的RemoveEven(ref source)
几乎肯定不需要。
答案 1 :(得分:4)
在.Net 2.0中,您可以使用Stopwatch类
IList<int> source = new List<int>(100);
for (int i = 0; i < 9999; i++)
{
source.Add(i);
}
Stopwatch watch = new Stopwatch();
watch.Start();
RemoveEven(ref source);
//watch.ElapsedMilliseconds contains the execution time in ms
watch.Stop()
答案 2 :(得分:0)
添加到之前的答案:
var sw = Stopwatch.StartNew();
// instructions to time
sw.Stop();
sw.ElapsedMilliseconds
返回一个long,其分辨率为:
1毫秒= 1000000纳秒
sw.Elapsed.TotalMilliseconds
返回一个double,其分辨率等于Stopwatch.Frequency的倒数。例如,在我的电脑上Stopwatch.Frequency
的值为2939541
每秒刻度,这使得sw.Elapsed.TotalMilliseconds
的分辨率为:
1/2939541秒= 3,401891655874165e-7秒= 340纳秒