2012-02-22 60 views
4

我测试在C#中某些情况下,考虑一些要领的表现, 当我在测试中,我面临着一个奇怪的情况下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

每次运行它都会发生吗? – GazTheDestroyer 2012-02-22 08:43:57

+0

这个问题可以重现吗?当我测试时,我的结果在0.81和1.14秒之间。 – 2012-02-22 08:49:30

+0

是的@GazTheDestroyer先生和萨拉曼先生它似乎像Tigran说,它可以从个人电脑到个人电脑 – Hilmi 2012-02-22 10:25:12

回答

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到PC不同,并重复乔恩的建议,使用StopWatch更加准确的测量。

8

您的瓶颈将是Console.WriteLine。各种各样的事情可能会影响到这一点,但特别是如果你最小化窗口或类似的东西,那可能会大大加快速度。

你确定你确实在测量任何有用的东西吗?您的真实世界应用程序是否对控制台进行了大量写入?

请注意,通常使用StopwatchDateTime.Now更好地衡量性能,虽然在这里没有什么区别。

+0

非常感谢我的朋友,总的来说你有一个观点,但我认为我的观点是它变得更快,'Console.WriteLine'如何变得糟糕透了? – Hilmi 2012-02-22 08:27:25

+0

我在中途将控制台窗口最小化的情况下进行了测试,但那几乎不会导致user1225246获得的加速。从大约1.6秒降到1.1。 – 2012-02-22 08:53:22

+0

@ user1225246:你掩盖了控制台窗口或类似的东西吗?或者也许图形子系统开始使用加速或类似的东西。基本上,除非你真的对测量控制台输出速度感兴趣,否则这些数字是无用的。 – 2012-02-22 08:57:00

相关问题