我需要创建一个大型文本文档。我目前使用 StringBuilder
制作文档,然后调用 File.WriteallText(filename,sb.ToString)
。不幸的是,这现在开始抛出内存异常。
是否有更好的方法将 StringBuilder
流式传输到文件,或者是否有其他我应该使用的技术?
最佳答案
不要使用 StringBuilder
,请尝试使用 TextWriter
(它具有大致相似的 API,但可以写入许多底层目标,包括文件)- 即
using(TextWriter writer = File.CreateText(path))
{
// loop etc
writer.Write(...);
}
更一般地说,将了解文件的代码与了解如何写入数据的代码分开是值得的,即
using(var writer = File.CreateText(path))
{
Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
...
}
这使得写入不同的目标变得更加容易。例如,您现在也可以在内存中执行操作:
var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
重点是:您的Serialize
代码不需要更改以适应不同的目标。这也可以是直接写入网络,或通过压缩/加密流写入。用途广泛。
关于c# - 将 StringBuilder 流式传输到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008092/