Streamwriter vs StringBuilder

moh*_*mad 8 c#

哪一个更好或更正确?从StreamWriter类创建对象并在方法中经常使用它并最终处理它是否更好?或者是否更好地使用一个对象StringBuilder然后从中创建一个对象StreamWriter并立即处置它?

1)

var Write = new StreamWriter(string.Format("{0}{1}{2}", Environment.CurrentDirectory, Path.DirectorySeparatorChar, "Dummy.txt"));
for (int i = 0; i < 100; i++)
{
    //Do something include calculation 
    Write.WriteLine(something);
}
Write.Flush();
Write.Dispose();
Run Code Online (Sandbox Code Playgroud)

2)

var Str = new StringBuilder();
for (int i = 0; i <     100; i++)
{
    //Do something include calculation 
    Str.AppendLine(something);
}
var Write = new StreamWriter(string.Format("{0}{1}{2}", Environment.CurrentDirectory, Path.DirectorySeparatorChar, "Dummy.txt"));
Write.Write(Str);
Write.Flush();
Write.Dispose();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

第一种可能使用更多IO操作,但内存更少.第二个需要缓冲内存中的所有内容.这可能是也可能不是问题.

什么是更多的问题是,你不使用using语句或try/ finally和您使用string.Format.

我会建议:

// Note the more conventional variable names, too...
string file = Path.Combine(Environment.CurrentDirectory, "Dummy.txt");
using (var writer = File.CreateText(file))
{
    for (int i = 0; i < 100; i++)
    {
        writer.WriteLine(...);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您正在编写的内容自然表示为LINQ查询(或任何其他IEnumerable<string>),您可以使用File.WriteAllLines:

var query = ...; // Something returning an IEnumerable<string>
var file = Path.Combine(Environment.CurrentDirectory, "Dummy.txt");
File.WriteAllLines(file, query);
Run Code Online (Sandbox Code Playgroud)