0

このコードは、〜380Kbの文字列を出力する2つの方法を掛けたものです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static string outbuff = "";
        static void Main(string[] args)
        {
            {
                Stopwatch exectime = new Stopwatch();
                System.IO.StreamWriter file;
                exectime.Reset(); exectime.Start();
                file = new System.IO.StreamWriter("output.html");
                for (int i = 0; i < 18000; i++)
                {
                    outbuff += "444444444, 5555555555\n";
                }
                string fin = "\nString method took " + exectime.Elapsed.TotalSeconds + "s";
                file.WriteLine(outbuff);
                Console.WriteLine(fin);
                file.WriteLine(fin);
                file.Close();
            }
            {
                Stopwatch exectime = new Stopwatch();
                System.IO.StreamWriter file;

                exectime.Reset(); exectime.Start();
                file = new System.IO.StreamWriter("output2.html");
                for (int i = 0; i < 18000; i++)
                {
                    file.Write("444444444, 5555555555\n");
                }
                string fin = "\nDirect method took " + exectime.Elapsed.TotalSeconds + "s";
                Console.WriteLine(fin);
                file.WriteLine(fin);
                file.Close();
            }
        }
    }
}

文字列法は2.2985349秒かかりました直接法は0.07191秒かかりました

これは、5GbRAMを搭載した3.5GHzCPU上にあります。

文字列で出力をバッファリングするだけではコストがかかることに失望しています。

私の実際のプログラムでは、文字列がアセンブルされるまで出力を延期する必要があります。より速い方法はありますか?

4

1 に答える 1

7

はい、StringBuilder代わりに文字列を組み立ててください。

パフォーマンス向上の詳細については、「StringBuilderクラスの使用」を参照してください。ただし、基本的に文字列は不変であるため、連結すると新しい文字列が作成され、非常にコストがかかります。

于 2013-03-27T02:02:53.097 に答える