A C# .NET exe (4.6.1) 通过调用执行 Console.Writeline 的方法输出大量状态。如此之多,以至于它明显减慢了执行速度。第一个想法是添加一个布尔值和/或不在基于值的调用方法中执行 Writeline。但是,如果 exe 执行 4000 个写入行,那就是 4000 个检查,这似乎太多了。
使输出短路的好方法是什么?一种以某种方式将 Console.SetOut 设置为空的方法?
谢谢。
您可以使用委托来解决此问题,尽管我确信检查布尔值可能比Console.WriteLine()
快得多。
向类添加委托:
public delegate void Output(string message);
然后在应用程序开始时,您可以检查您的 bool 并根据您是否要实际写入来分配要运行的方法。
bool logInformation = true;
if(logInformation)
{
ProcessInformation((s) => { Console.WriteLine(s); });
}
else
{
ProcessInformation((s) => { });
}
最后将委托添加到处理方法的方法签名中。
private void ProcessInformation(Output logger)
{
// doing stuff, time to write
logger("test");
}
你需要用logger()替换你的Console.WriteLine调用,但这将允许你运行东西,而不必担心每次都检查布尔值。也就是说,我不知道它是否真的比每次检查布尔值更快,但可能更容易实现和维护。
要回答您的确切问题:
Console.SetOut(TextWriter.Null);
但是,System.Diagnostics TraceEvent 调用使您可以更精细地控制要输出的内容。例如,在生产中,您只能输出"错误"消息,而在开发中,您可以输出详细日志。https://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.traceevent(v=vs.110).aspx