【发布时间】:2012-02-21 12:24:36
【问题描述】:
我在 c# 中有三个方法运行相同的代码,但有一点不同,我的第一个代码块是
Stopwatch s = new Stopwatch();
object o = new object();
s.Start();
for (int i = 0; i < 100000000; i++)
{
o.ToString();
o.GetType();
o.GetHashCode();
}
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds); //3100ms
这需要 3100 毫秒的运行时间。然后,如果我将 for 中的对象初始化增加到 7200 毫秒,我的代码块看起来像这样;
Stopwatch s = new Stopwatch();
s.Start();
for (int i = 0; i < 100000000; i++)
{
object o = new object();
o.ToString();
o.GetType();
o.GetHashCode();
}
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds);//7200ms
但是,如果我初始化我的对象但不使用其中的任何方法,则需要 652 毫秒。而我的代码就是这样的,
Stopwatch s = new Stopwatch();
s.Start();
for (int i = 0; i < 100000000; i++)
{
object o = new object();
}
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds);//625ms
所以我想知道,3100ms + 625ms 无法与 7200ms 相提并论。是什么导致前两者之间的差异如此之大?
【问题讨论】:
-
这是在发布模式下编译并在 VS 之外运行的吗?
-
调用你的 3 个
object方法怎么样? -
@Menahem :我在没有调试的情况下调用它。
-
@ken2k :实际上并没有改变任何东西,记录仍然相同。
标签: c# .net for-loop benchmarking