使用 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));
        }

如果我正在向文件写入完整的字符串,那么它会花费相当长的时间,尽管如此,逐段写入,我认为并没有多大帮助。

虽然这让我想到了两个问题

  1. 哪个过程会更快,是写整个字符串还是小片段?
  2. 我应该使用其他文件写入方法来加快性能吗?

此致,

答案确实是StringBuilder。修改代码的所有部分,而不是使用 + (串联)我起诉 StringBuilder.Append() 并将其作为字符串返回。现在创建报告的时间不到 5 秒,而不是 22 分钟。所以这是一个巨大的进步。