首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Streamwriter vs StringBuilder

Streamwriter vs StringBuilder
EN

Stack Overflow用户
提问于 2013-08-01 16:09:53
回答 2查看 10.3K关注 0票数 9

哪个更好,哪个更正确?从StreamWriter类创建一个对象,并在方法中频繁使用它,然后最终将其释放,是不是更好呢?还是使用StringBuilder中的对象比从StreamWriter中创建对象并立即将其销毁更好?

1)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-01 16:13:35

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

更严重的问题是,您使用的不是using语句或try/finally,而是string.Format

我建议:

代码语言:javascript
复制
// 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

代码语言:javascript
复制
var query = ...; // Something returning an IEnumerable<string>
var file = Path.Combine(Environment.CurrentDirectory, "Dummy.txt");
File.WriteAllLines(file, query);
票数 10
EN

Stack Overflow用户

发布于 2013-08-01 16:13:09

这确实取决于您的应用程序的上下文。例如,如果您有其他程序监听来自该流的内容,并且它们可以一次处理一个令牌的数据,那么使用第一种方法显然更可取。

也就是说,如果您只是将内容写出到文本文件中进行存储,那么使用第二种方法可能是值得的。我认为第二种方法可能会运行得很快,因为StringBuilder非常快,而且您只执行一次写操作,而第一种方法是为每次写操作不断地创建一个新对象。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17988457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档