8

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

4

4 回答 4

6

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

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

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

于 2012-07-02T19:00:04.337 回答
2

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

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

正如评论中提到的,您可以使用Debug.WriteLine而不是Console.WriteLine这样您可以在调试时看到输出,但是当您编译 Release 构建时,它不会打印这些语句。

于 2012-07-02T18:24:16.590 回答
0

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

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

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

根据您的要求,Debug.WriteLine() 可能是一个更好的选择,因为当您为 Release 构建时,这些将被自动排除。

于 2012-07-02T18:28:17.583 回答
0

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

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

埃里克

于 2012-07-02T20:00:35.400 回答