StreamWriter的VS的StringBuilder [英] 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 StreamWriter
class 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屋!