Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
即使控制台不可见,Console.WriteLine是否也会导致性能损失?(C#)_C#_.net_Console Application - Fatal编程技术网

即使控制台不可见,Console.WriteLine是否也会导致性能损失?(C#)

即使控制台不可见,Console.WriteLine是否也会导致性能损失?(C#),c#,.net,console-application,C#,.net,Console Application,我有一个控制台应用程序,它有很多WriteLine()函数,这个应用程序也应该作为“服务”运行(一个计划任务,用户在运行时没有登录) 在这种情况下,没有实际的cmd窗口显示。在这种情况下,Console.WriteLine()是否仍会导致明显的性能损失?是即使控制台不可见,也会导致性能损失 我的实验是在控制台可见的情况下运行这段代码,再次在控制台隐藏的情况下运行,并测量性能 首次运行控制台可见24683毫秒 第二次运行控制台可见23363毫秒 static void Main(strin

我有一个控制台应用程序,它有很多
WriteLine()
函数,这个应用程序也应该作为“服务”运行(一个计划任务,用户在运行时没有登录)


在这种情况下,没有实际的cmd窗口显示。在这种情况下,
Console.WriteLine()
是否仍会导致明显的性能损失?

即使控制台不可见,也会导致性能损失

我的实验是在控制台可见的情况下运行这段代码,再次在控制台隐藏的情况下运行,并测量性能

首次运行控制台可见24683毫秒
第二次运行控制台可见23363毫秒

    static void Main(string[] args)
    {
        WriteMilionLines();
    }

    static void WriteMilionLines()
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (int i = 0; i < 1000000; i++)
        {
           Console.WriteLine(i);
        }
        sw.Stop();

        string message = "ElapsedMilliseconds" + sw.ElapsedMilliseconds;
        File.WriteAllText(@"c:\log.txt", message);
    }
首次运行控制台隐藏167毫秒
第二次运行控制台隐藏162毫秒

    static void Main(string[] args)
    {
        WriteMilionLines();
    }

    static void WriteMilionLines()
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (int i = 0; i < 1000000; i++)
        {
           Console.WriteLine(i);
        }
        sw.Stop();

        string message = "ElapsedMilliseconds" + sw.ElapsedMilliseconds;
        File.WriteAllText(@"c:\log.txt", message);
    }
static void Main(字符串[]args)
{
writemilonlines();
}
静态void writeMilonLines()
{
秒表sw=新秒表();
sw.Start();
对于(int i=0;i<1000000;i++)
{
控制台写入线(i);
}
sw.Stop();
字符串消息=“elapsedmillesons”+sw.elapsedmillesons;
writealText(@“c:\log.txt”,消息);
}

通过注释
Console.WriteLine(i)行它将花费0毫秒

不,它不会被注意到。除非您的应用程序执行99%的Console.WriteLine()
以及几乎其他任何操作,否则差异将可以忽略不计


如果您仍然担心性能,您可以将控制台调用封装到您可以控制的方法中,并测量应用程序经过的总时间,甚至引入一个开关(bool变量)来控制其调用。

不,它没有。下次运行因控制台输出而变慢的程序时,请尝试隐藏控制台窗口,并查看当控制台不在屏幕上时,它完成输出的速度有多快。@dasblinkenlight是正确的,但写入仍会影响性能。我相信它们仍然被传输到csrss.exe中,以便csrss可以根据请求绘制控制台。我记得使用异步任务将终止writeline对性能的影响。一个简单的测试是从10亿写到10亿。使用异步任务,它在几秒钟内完成得非常快。但我不确定它是否打印了所有的文件numbers@M.kazemAkhgary是的,它没有打印所有的数字:)因为你没有等待这些任务。异步并不能使IOs更快。这会让他们变慢。定义“引人注目”。当然,任何执行的代码都会导致性能损失。15年前Console.WriteLine()是一个显著的减速,但毫无疑问,现在情况有所好转。吮吸它,看看:-)150倍的缩减对我来说并不小。如果你注释掉Console.WriteLine(i),编译器会发现不需要循环,它会将代码视为根本没有循环……这只会单独测试纯Console.WriteLine,这显然会产生巨大的差异。但是在实际的代码中,除了控制台调用之外,还有很多其他的事情发生,所以差异可以忽略不计。答案应该是否定的,因为缺点不明显,OP就是这么问的。您可以尝试将Console.WriteLine代码放在“#if DEBUG”标记中。这样,在发布代码中就不应该有性能损失。