【问题标题】:is Console.WriteLine a bottleneck in Windows Applications?Console.WriteLine 是 Windows 应用程序的瓶颈吗?
【发布时间】:2012-07-02 18:18:16
【问题描述】:

如果我有 WPF 应用程序并且出于调试目的,控制台上会显示一些消息。当应用程序配置为 Windows 应用程序并且没有显示控制台时,这会影响应用程序的性能吗?

【问题讨论】:

  • 那么,出于调试目的,为什么不使用 Debug.WriteLine?它输出到“输出”窗口,但如果我没记错的话,可以通过 Visual Studio 选项重定向到即时窗口。
  • 测量一下你就知道了:-)
  • asp.net 的类似问题,不保证答案相同:stackoverflow.com/questions/137660/…

标签: c# wpf console.writeline


【解决方案1】:

Console.WriteLine() 的真正瓶颈在于实际写入控制台。这真的很昂贵,尤其是在需要滚动控制台时。在没有控制台时捕获输出并将其显示在“输出”窗口中的 Visual Studio 托管过程也存在相当大的开销。

在您部署应用后,这两者都不起作用。但是是的,所有的方法调用都在进行并且字符串正在被格式化,它只会在 Windows api 函数发现没有控制台的最后一刻才落入位桶中。

如果您的应用现在具有可接受的性能,在调试版本中运行时,请不要担心。如果您在没有调试器的情况下在 Release 版本中看到性能不佳,并且您认为这可能是由 Console.WriteLine() 引起的,那么请不要犹豫,将其搜索 + 替换为 Debug.Print()。

【讨论】:

    【解决方案2】:

    瓶颈意味着它是代码中最慢的点。除非我们知道你在做什么,否则我们无法知道这一点。

    是否有任何性能影响,是的,可能。它不是什么都不做,而是在做某事。是否足以成为您程序的瓶颈,我非常怀疑。是否足以产生明显的影响?有可能,但不太可能。这完全取决于您的程序正在做什么,以及您向控制台写入了多少(您需要花很多时间才能开始注意到它所花费的时间。)

    正如 cmets 中所述,您可以使用 Debug.WriteLine 而不是 Console.WriteLine,以便在调试时可以看到输出,但在编译 Release 版本时,它不会打印这些语句。

    【讨论】:

      【解决方案3】:

      做某事总是比什么都不做花费更长的时间。

      将文本写入空控制台的行为不应该对性能造成重大影响,但您作为参数传入的内容和数量可能会是什么。

      在使用和不使用控制台输出的情况下测量实际性能,以亲自查看您的使用模式是否在可接受的公差范围内。

      Debug.WriteLine() 可能是更好的选择,具体取决于您的要求,因为在为 Release 构建时会自动排除这些。

      【讨论】:

        【解决方案4】:

        尝试构建和优化您自己的日志框架很少是最好的方法。

        你看过类似 log4net 的东西吗?您可以配置各种附加程序,包括登录到控制台。您还可以构建异步附加程序以真正减少日志记录开销。

        埃里克

        【讨论】:

          猜你喜欢
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-14
          相关资源
          最近更新 更多