哪个更好,哪个更正确?从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();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();发布于 2013-08-01 16:13:35
第一种方法可能会使用更多的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(...);
}
}此外,如果您正在编写的内容自然地被表示为LINQ查询(或任何其他IEnumerable<string>),那么您可以只使用File.WriteAllLines
var query = ...; // Something returning an IEnumerable<string>
var file = Path.Combine(Environment.CurrentDirectory, "Dummy.txt");
File.WriteAllLines(file, query);发布于 2013-08-01 16:13:09
这确实取决于您的应用程序的上下文。例如,如果您有其他程序监听来自该流的内容,并且它们可以一次处理一个令牌的数据,那么使用第一种方法显然更可取。
也就是说,如果您只是将内容写出到文本文件中进行存储,那么使用第二种方法可能是值得的。我认为第二种方法可能会运行得很快,因为StringBuilder非常快,而且您只执行一次写操作,而第一种方法是为每次写操作不断地创建一个新对象。
https://stackoverflow.com/questions/17988457
复制相似问题