Help us understand the problem. What is going on with this article?

【C#】Debug.WriteLineとConsole.WriteLineの速度を比べてみた

注意

多少雑なところがあるかもしれませんがご了承ください
Debug環境での話になります
Releaseでは話は変わります

Debug.WriteLineとConsole.WriteLineとは

Debug.WriteLine

デバッグについての情報を Listeners コレクションのトレース リスナーに書き込むメソッドです
VisualStudioでDebugに設定したときに出力の欄にLogを出したりできます

Console.WriteLine

説明するまでもないと思いますが
コンソールにデータを出力するメソッドです

遅いと思ったら

Debug.WriteLineは一般に遅いといわれています
あまり使いすぎるとかなり遅くなってしまいます

検証

どのくらい遅いかをConsole.WriteLineと比べようと思いました

検証方法

計測はそれぞれ10000回を10回繰り返した時間を計測
10000回の平均値を計算し、さらにそこから一回の速度を計算します
プログラム

using System;
using System.Diagnostics;
using System.Linq;

namespace log_speed
{
    class Program
    {
        static void Main(string[] args)
        {
            long[] TempTime=new long[10];
            double AvDebug,AvConsole;

            Stopwatch sw = new Stopwatch();
            for (int i = 0; i < 10; i++)
            {
                sw.Start();
                for (int j = 1; j <= 10000; j++)
                {
                    Debug.WriteLine(j + "回目");
                }
                sw.Stop();
                TempTime[i] = sw.ElapsedMilliseconds;
                sw.Reset();
            }
            AvDebug =TempTime.Average();
            for (int i = 0; i < 10; i++)
            {
                sw.Start();
                for (int j = 1; j <= 10000; j++)
                {
                    Console.WriteLine(j + "回目");
                }
                sw.Stop();
                TempTime[i] = sw.ElapsedMilliseconds;
                sw.Reset();
            }
            AvConsole = TempTime.Average();
            Console.WriteLine("Debug10000回の平均速度:" + AvDebug+ " Debug1回の平均速度:" + AvDebug/10000 + "\nConsole10000回の平均速度:" + AvConsole+ " Console1回の平均速度:" + AvConsole/10000);
            Console.ReadKey();
        }
    }
}

変なところがあればご連絡ください

実行

実行環境

種類 メーカー パーツ名 個数
CPU AMD Ryzen 5 1600 1
マザーボード ASUS PRIME B450M-A 1
GPU nVIDIA GTX960 1
RAM G.Skill F4-2400C15-4GNT 4
SSD Samsung 860 EVO M.2 500GB 1

今回の検証ではボトルネックとなる部分は少ないと思います

IDEはMicrosoft Visual Studio Community 2019 Version 16.7.6です
対象フレームワークは.NET Framework 4.7.2です

実行結果

実行結果はこのようになりました
結果.png

10000回の平均速度は10000回を10回繰り返したうちの10000回にかかる時間です
約3.4倍遅いようです

まとめと感想

今回比較してみて思ったことはDebug.WriteLineもそこまで遅くないということです、ただ3.4倍も速度が違うので
極力Console.WriteLineを使うほうがいいと思います

BinaryNumber
C#をメインで使っています 自作言語を作っています リフレクションが好きな高校生です
Actlogy
Actlogyは多くの技術、個性を持つ人たちの集まりです。互いに、情報を共有し、新しい作品やプロジェクトを促進するグループです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away