如何解决使用 StreamWriter:写一个大字符串或许多小片段哪个更快?
我正在用 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 分钟。所以这是一个巨大的改进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。