【问题标题】:C# Performance weird caseC# 性能怪异案例
【发布时间】:2012-03-12 13:38:07
【问题描述】:

我在 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.81 到 1.14 秒之间的结果。
  • 是的 @GazTheDestroyer 先生和 Salaman A 先生,就像 Tigran 所说的,它可能因 PC 而异
  • 您测量的是Console.WriteLine 的性能。这取决于控制台是否可见。

标签: c# performance time


【解决方案1】:

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

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

请注意,使用Stopwatch 来衡量性能通常比使用DateTime.Now 更好,尽管在这里不会有太大区别。

【讨论】:

  • 非常感谢我的朋友,你有一个总体的观点,但我认为我的观点是它变得更快,'Console.WriteLine' 是如何获得贝雷帽的?
  • 我在中途最小化控制台窗口进行了测试,但这几乎没有导致 user1225246 得到加速。从大约 1.6 秒下降到 1.1。
  • @user1225246:你把控制台窗口或类似的东西遮住了吗?或者也许图形子系统开始使用加速或类似的东西。基本上,除非您真的对测量控制台输出的速度感兴趣,否则这些数字毫无用处。
  • Debug.WriteLine 可能更合适。另外快速搜索 SO 有几篇文章表明它“更快”或至少更一致,例如stackoverflow.com/questions/5272177/console-writeline-slow
  • @dash:这完全取决于你想要做什么。对于日志记录,我宁愿使用像 Log4net 这样的专用日志记录包。
【解决方案2】:

我只是在我的电脑上运行相同的代码并得到以下输出:

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,以获得更准确的测量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多