10

動的に生成された何千もの行をテキスト ファイルに書き込む必要があります。2 つの選択肢があります。リソースの消費量が少なく、高速なのはどちらですか?

A. StringBuilder と File.WriteAllText の使用

StringBuilder sb = new StringBuilder();

foreach(Data dataItem in Datas)
{
    sb.AppendLine(
        String.Format(
            "{0}, {1}-{2}",
            dataItem.Property1,
            dataItem.Property2,
            dataItem.Property3));
}

File.WriteAllText("C:\\example.txt", sb.ToString(), new UTF8Encoding(false)); 

B. File.AppendText の使用

using(StreamWriter sw = File.AppendText("C:\\example.txt"))
{
    foreach (Data dataItem in Datas)
    {
        sw.WriteLine(
            String.Format(
                "{0}, {1}-{2}",
                dataItem.Property1,
                dataItem.Property2,
                dataItem.Property3));
    }
}
4

2 に答える 2

7

を使用して、少なくとも1つの他の選択肢がありますFile.AppendAllLines()

var data = from item in Datas
            select string.Format("{0}, {1}-{2}", item.Property1, item.Property2, item.Property3);

File.AppendAllLines("Filename", data, new UTF8Encoding(false));

一度に 1 行だけがメモリにバッファリングされるため、これは理論的には最初のアプローチよりも少ないメモリを使用します。

ただし、おそらく2番目のアプローチとほぼ同じになります。3 番目の選択肢を示しているだけです。これの唯一の利点は、Linq シーケンスをフィードできることです。これは、役立つ場合があります。

I / O速度は他の考慮事項よりもはるかに重要であるため、上記のjuharrのようにメモリ使用量を最小限に抑えることに集中する必要があります(もちろん、時期尚早の最適化の危険性も考慮してください!)

それはあなたの2番目のアプローチ、または私がここに置いたものを使用することを意味します.

于 2013-04-24T12:25:18.640 に答える