使用 StreamWriter:编写一个大字符串或多个小片段哪个更快?
Using StreamWriter: What is quicker writting one big string or many smaller pieces?
我正在用 C# 生成一个 HTML 输出文件,尽管 60 Mb 文件的速度性能似乎长得不可思议。生成文件需要 20 分钟,这是一个非常缓慢的过程。之前大约 35 Mb,它是在 5 秒内生成的,所以我不确定是什么导致了这里的延迟。
首先,我将使用这些行开始生成报告:
public static void GenerateHtmlReport()
{
GenerateFinalResults();
HtmlFileName ??= "Report-" + $"{DateTime.Now:dd_MMM_yyyy-[HH_mm]}" + ".html";
var fileName = Path.Combine(GetRootFolder(), HtmlFileName);
using var fs = new FileStream(fileName, FileMode.Create);
using var w = new StreamWriter(fs, Encoding.UTF8);
w.WriteLine(RenderHtml.ContructReportHeader(User));
RenderHtml.ConstructHtmlBody(Results, w);
w.WriteLine(RenderHtml.ConstructFullSummaryReport(Results));
w.WriteLine(RenderHtml.ContructDashboard(Results, ResultStart));
}
如果我正在向文件写入完整的字符串,那么它会花费相当长的时间,尽管如此,逐段写入,我认为并没有多大帮助。
虽然这让我想到了两个问题
- 哪个过程会更快,是写整个字符串还是小片段?
- 我应该使用其他文件写入方法来加快性能吗?
此致,
答案确实是StringBuilder。修改代码的所有部分,而不是使用 + (串联)我起诉 StringBuilder.Append() 并将其作为字符串返回。现在创建报告的时间不到 5 秒,而不是 22 分钟。所以这是一个巨大的进步。
我正在用 C# 生成一个 HTML 输出文件,尽管 60 Mb 文件的速度性能似乎长得不可思议。生成文件需要 20 分钟,这是一个非常缓慢的过程。之前大约 35 Mb,它是在 5 秒内生成的,所以我不确定是什么导致了这里的延迟。
首先,我将使用这些行开始生成报告:
public static void GenerateHtmlReport()
{
GenerateFinalResults();
HtmlFileName ??= "Report-" + $"{DateTime.Now:dd_MMM_yyyy-[HH_mm]}" + ".html";
var fileName = Path.Combine(GetRootFolder(), HtmlFileName);
using var fs = new FileStream(fileName, FileMode.Create);
using var w = new StreamWriter(fs, Encoding.UTF8);
w.WriteLine(RenderHtml.ContructReportHeader(User));
RenderHtml.ConstructHtmlBody(Results, w);
w.WriteLine(RenderHtml.ConstructFullSummaryReport(Results));
w.WriteLine(RenderHtml.ContructDashboard(Results, ResultStart));
}
如果我正在向文件写入完整的字符串,那么它会花费相当长的时间,尽管如此,逐段写入,我认为并没有多大帮助。
虽然这让我想到了两个问题
- 哪个过程会更快,是写整个字符串还是小片段?
- 我应该使用其他文件写入方法来加快性能吗?
此致,
答案确实是StringBuilder。修改代码的所有部分,而不是使用 + (串联)我起诉 StringBuilder.Append() 并将其作为字符串返回。现在创建报告的时间不到 5 秒,而不是 22 分钟。所以这是一个巨大的进步。