禁用或删除所有Console#WriteLine调用?

时间:2011-02-05 20:58:14

标签: c# .net

在我的应用程序中,我有很多Console#WriteLineConsole#Write calls。这太多了,应用程序的速度实际上要慢得多。

所以我正在寻找一种简单的方法来删除或至少禁用所有Console#WriteLine和Console#Write来电。

实现这一目标的最简单方法是什么?

6 个答案:

答案 0 :(得分:22)

这是我实施的更快捷的修复方法。

...
static int Main(String[] args)
{
...
#if !DEBUG
    Console.SetOut(TextWriter.Null);
    Console.SetError(TextWriter.Null);
#endif
...
}

HTH

答案 1 :(得分:3)

在任何代码编辑器中可能都有Find& Replace功能? 例如找到所有

Console.WriteLine 

并替换为

//Console.WriteLine

答案 2 :(得分:3)

如果它们不是必需的(日志记录),那么您应该使用System.Diagnostics.Debug.Print()开始。

幸运的是WriteLine()Debug.Print()兼容,因此这是一个简单的S& R.并修复一些使用可能。

替换Console.Write()可能有点棘手。

完成:可以使用项目|属性中的复选框打开/关闭Debug.Print()语句。

答案 3 :(得分:1)

使用简单的非正则表达式“查找/替换”对话框,并将每个Console.WriteLine(替换为Debug.WriteLine(

然后,您可以跟踪以前直接输出到控制台窗口的内容,仍然可以在发布模式下优化性能。

答案 4 :(得分:1)

在Visual Studio中,使用Tools|Macros|Record temporary macro选项记录执行Find of“Console.Write”的宏,并删除该行。那就是:

Ctrl + F查找“Console.Write” 然后按Ctrl + L删除该行。

保存宏,然后针对项目中包含有违规行的每个文件运行它。

大约需要两分钟。

但是,我建议您首先备份源代码。以防万一。

答案 5 :(得分:0)

要在运行时临时使用

关闭 Console.WriteLine()输出,请使用

     // backup the previous output handler connected to Console
     TextWriter backupOut = Console.Out;

     // activate a null handle
     Console.SetOut(TextWriter.Null);

     // this console output will be invisible
     Console.WriteLine("Hidden output on Console.");

     // restore the previous handle
     Console.SetOut(backupOut);

     // this console output will be visible
     Console.WriteLine("Showing output on Console.");

类似地,您可以在运行时禁用程序 Debug.WriteLine()输出,也可以在调试模式下编译时,通过使用虚拟TextWriterTraceListener来禁用

 using System.Diagnostics;
 using System.IO;

 //...

 public class MyDummyListener: TextWriterTraceListener
 { }

 // ......

 [STAThread]
 static void Main()
 {
        // Back up the old one
        DefaultTraceListener[] debuglisteners = {(DefaultTraceListener) Debug.Listeners[0]};

        // Plug in dummy listener
        TextWriterTraceListener[] dummylisteners = {new MyDummyListener()};
        Debug.Listeners.Clear();
        Debug.Listeners.AddRange(dummylisteners);

        // this is an invisible debug message
        Debug.WriteLine("This one is invisible");

        // ..

        // to activate output again, plug in the previous listener
        Debug.Listeners.Clear();
        Debug.Listeners.AddRange(debuglisteners);
        Debug.WriteLine("This one is visible again");

  // ....
}

注意:我使用Winforms平台在Debug模式下在.NET Framework 4.7.2中测试了上述代码。