Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Console.WriteLine是Windows应用程序中的瓶颈吗?_C#_Wpf_Console.writeline - Fatal编程技术网

C# Console.WriteLine是Windows应用程序中的瓶颈吗?

C# Console.WriteLine是Windows应用程序中的瓶颈吗?,c#,wpf,console.writeline,C#,Wpf,Console.writeline,如果我有WPF应用程序,并且出于调试目的,控制台上会显示一些消息。如果将应用程序配置为Windows应用程序且未显示控制台,这会影响应用程序的性能吗 瓶颈意味着它是代码中最慢的点。我们不能知道,除非我们知道你在做什么 是否有任何性能影响,是的,可能。它不是什么都不做,而是在做一些事情。这是否足以成为你项目的瓶颈,我高度怀疑。它是否足以产生显著的影响,这是可能的,但不太可能。这完全取决于你的程序在做什么,以及你在控制台上写了多少东西(你需要花很多时间才能开始注意它所花的时间) 正如在评论中提到的,

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

瓶颈意味着它是代码中最慢的点。我们不能知道,除非我们知道你在做什么

是否有任何性能影响,是的,可能。它不是什么都不做,而是在做一些事情。这是否足以成为你项目的瓶颈,我高度怀疑。它是否足以产生显著的影响,这是可能的,但不太可能。这完全取决于你的程序在做什么,以及你在控制台上写了多少东西(你需要花很多时间才能开始注意它所花的时间)


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

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

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

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


Debug.WriteLine()可能是一个更好的选择,这取决于您的需求,因为当您构建发布版时,这些将自动被排除。

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

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


如果你的应用程序现在在调试版本中运行时具有可接受的性能,那么不要担心。如果您在没有调试器的发布版本中发现性能不太理想,并且您认为这可能是由Console.WriteLine()引起的,那么请毫不犹豫地搜索并将其替换为Debug.Print()。

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

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


Erick

那么,出于调试目的,为什么不使用Debug.WriteLine呢?它输出到“输出”窗口,但如果我没有弄错的话,可以通过Visual Studio选项重定向到即时窗口。测量它,您肯定会知道:-)对于asp.net,类似的问题,不能保证答案是相同的: