C# Streamwriter与StringBuilder

C# Streamwriter与StringBuilder,c#,C#,哪一个更好或更正确? 从StreamWriter类中创建一个对象,并在方法中频繁使用它并最终处理它是否更好?还是使用StringBuilder中的对象,然后从StreamWriter中创建一个对象并立即处理它更好 (一) var Write=newstreamwriter(string.Format(“{0}{1}{2}”、Environment.CurrentDirectory、Path.directoryseportorchar、“Dummy.txt”); 对于(int i=0;i

哪一个更好或更正确? 从
StreamWriter
类中创建一个对象,并在方法中频繁使用它并最终处理它是否更好?还是使用
StringBuilder
中的对象,然后从
StreamWriter
中创建一个对象并立即处理它更好

(一)

var Write=newstreamwriter(string.Format(“{0}{1}{2}”、Environment.CurrentDirectory、Path.directoryseportorchar、“Dummy.txt”);
对于(int i=0;i<100;i++)
{
//做一些包括计算在内的事情
写,写(某物);
}
Write.Flush();
Write.Dispose();
(二)

var Str=new StringBuilder();
对于(int i=0;i<100;i++)
{
//做一些包括计算在内的事情
附属物(某物);
}
var Write=newstreamwriter(string.Format(“{0}{1}{2}”、Environment.CurrentDirectory、Path.directoryseportorchar、“Dummy.txt”);
写。写(Str);
Write.Flush();
Write.Dispose();

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


这就是说,如果您只是将内容写入文本文件进行存储,那么第二个选项可能值得一试。我认为第二个选项可能会运行得相当快,因为
StringBuilder
非常快,并且您只执行一个写入操作,而第一个选项则是不断为每次写入创建一个新对象。

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

更大的问题是,您没有使用
使用
语句或
尝试
/
最终
,而是使用了
字符串.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(...);
    }
}

不要在路径上使用
string.Format
,而是使用
Path.Combine(Environment.CurrentDirectory,“Dummy.txt”)
。要立即
处理
请尝试研究如何使用
using(){}
结构与StreamWriter一起使用“using”块:谢谢您的回复。有时,当程序试图写入输出文件时,此错误会引发“试图读取或写入受保护的内存。这通常表示其他内存已被写入”,我认为这可能取决于写入输出的方法。否则它应该是硬盘问题。
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();
// 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(...);
    }
}
var query = ...; // Something returning an IEnumerable<string>
var file = Path.Combine(Environment.CurrentDirectory, "Dummy.txt");
File.WriteAllLines(file, query);