我在C#中测试了一些案例来考虑性能方面的一些基本要素, 在我测试的时候,我遇到了一个奇怪的案例
for (int i = 0; i < 30; i++)
{
DateTime d = DateTime.Now;
print();
result.Add ((DateTime.Now - d));
}
foreach(TimeSpan t in result)
Console.WriteLine(t.ToString());
虽然打印功能很简单:
public static void print ()
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine( string.Format("{0}", i));
}
}
我对结果感到震惊,而前三个循环花了大约5秒钟,而之后花了大约0.5秒。 这是一些:
00:00:05.6212696
00:00:05.6072002
00:00:05.5837965
00:00:01.9451673
00:00:00.5526335
00:00:00.5540554
00:00:00.5676418
00:00:00.5372442
00:00:00.5772550
我只是想知道为什么在第三次迭代后它变好了近10倍?
答案 0 :(得分:8)
这里的瓶颈将是Console.WriteLine
。各种各样的事情可能会影响到这一点,但特别是如果你最小化窗口或类似的东西,那可能大规模加快速度。
你确定你真正在测量任何有用的东西吗?您的真实应用程序是否会对控制台进行大量编写?
请注意,使用Stopwatch
而不是DateTime.Now
来衡量效果通常会更好,尽管这里没有什么区别。
答案 1 :(得分:3)
我只是在我的电脑上运行相同的代码并得到以下输出:
00:00:00.0469083
00:00:00.0312722
00:00:00.0312722
00:00:00.0469083
00:00:00.0312722
00:00:00.0312722
00:00:00.0312722
00:00:00.0469083
....
如你所见,没有明显的区别。我建议,首先不要放松时间
检查这些案例的表现,因为它可能因PC而异,并重复使用Jon,以使用StopWatch
进行更精确的测量。