FROM ME TO YOU

oh my bizarre life !!

StringBuilderとStopwatch機能を使ってみた

StringBuilderはえー。 ミリ秒表示を調べるのに手こずった。 桁数揃えるのは切り捨て処理とか必要なのかな。ちょっと面倒。

    class Program
    {
        static void Main(string[] args)
        {

            string Str = "";
            DateTime StartDt = DateTime.Now;
            for(int i = 0; i< 30000; i++)
            {
                Str = Str + "ABCDEFG";
            }
            DateTime EndDt = DateTime.Now;
            Console.WriteLine("String連結3万回:{0}秒",(EndDt - StartDt).TotalSeconds);

            StringBuilder stb = new StringBuilder();
            Stopwatch Sw = new Stopwatch();
            Sw.Start();
            for (int i = 0; i < 300000; i++)
            {
                stb.Append("ABCDEFG");
            }
            Sw.Stop();
            double Sec = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("StringBulider30万回:{0}秒", Sec);

            // 実行結果
            // String連結3万回:1.4610836秒
            // StringBulider30万回:0.00474824136650194秒
        }
    }

記事を公開したらタイマ計測方法は揃えた方がよいよとご指摘頂いた。あざます。きさとさん。

ということで書き直してみた。回数も揃えた。

        static void Main(string[] args)
        {
            string Str = "";
            Stopwatch Sw = new Stopwatch();
            Sw.Start();
            for (int i = 0; i < 30000; i++)
            {
                Str = Str + "ABCDEFG";
            }
            Sw.Stop();
            double Sec1 = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("String連結3万回   :{0}秒", Sec1);


            StringBuilder stb = new StringBuilder();
            Sw.Reset();
            Sw.Start();
            for (int i = 0; i < 30000; i++)
            {
                stb.Append("ABCDEFG");
            }
            Sw.Stop();
            double Sec2 = (double)Sw.ElapsedTicks / (double)Stopwatch.Frequency;
            Console.WriteLine("StringBulider3万回:{0}秒", Sec2);

            // 実行結果
            // String連結3万回   :1.57325590253888秒
            // StringBulider3万回:0.000421969408994146秒

        }