StreamWriter的VS的StringBuilder [英] Streamwriter vs StringBuilder

查看:393
本文介绍了StreamWriter的VS的StringBuilder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

哪一个不工作得更好或更正确的?
是更好地创建的StreamWriter 的对象类和方法经常使用它,并最终处置呢?或者是它更好地使用一个对象从的StringBuilder 然后创建一个对象的StreamWriter 并立即处置呢?



1)

  VAR写=新的StreamWriter(的String.Format({ 0} {1} {2},Environment.CurrentDirectory,Path.DirectorySeparatorChar,Dummy.txt)); 
的for(int i = 0; I< 100;我++)
{
//做一些事情包括计算
Write.WriteLine(东西);
}
Write.Flush();
Write.Dispose();



2)

 无功海峡=新的StringBuilder(); 
的for(int i = 0; I< 100;我++)
{
//做一些事情包括计算
Str.AppendLine(东西);
}
变种写=新的StreamWriter(的String.Format({0} {1} {2},Environment.CurrentDirectory,Path.DirectorySeparatorChar,Dummy.txt));
Write.Write(STR);
Write.Flush();
Write.Dispose();


解决方案

第一个可能使用更多的IO操作,但较少的内存。第二个需要缓冲存储器中的一切。这可能会或可能不会是一个问题。



什么的更多的一个问题是,你不使用使用语句或尝试 / 最后,而且你正在使用<$ C $ 。C>的String.Format



我建议:

  //注意比较传统的变量名,太... 
字符串文件= Path.Combine(Environment.CurrentDirectoryDummy.txt);
使用(VAR作家= File.CreateText(文件))
{
的for(int i = 0; I< 100;我++)
{
作家。的WriteLine(...);
}
}

此外,如果你正在写的自然表达作为一个LINQ查询(或任何其他的IEnumerable<串> ),您可以只使用 File.WriteAllLines

  VAR的查询= ...; //返回东西一个IEnumerable<串GT; 
var文件= Path.Combine(Environment.CurrentDirectoryDummy.txt);
File.WriteAllLines(文件,查询);


Which one does work better or is more correct? Is it better to create an object from StreamWriterclass and use it frequently in a method and finally dispose it? or is it better to use an object from StringBuilder then create an object from StreamWriter and immediately dispose it?

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();

解决方案

The first potentially uses more IO operations, but less memory. The second needs to buffer everything in memory. That may or may not be a problem.

What's more of a problem is that you're not using a using statement or try/finally, and that you're using string.Format.

I would suggest:

// 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(...);
    }
}

Additionally, if what you're writing is naturally expressed as a LINQ query (or any other IEnumerable<string>) you can just use File.WriteAllLines:

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

这篇关于StreamWriter的VS的StringBuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆