我有一个简单的Windows服务,每天只运行一次。它在数据库中执行一些查询,生成适当的html内容(表格,div,...)并将其发送到多个收件人的电子邮件正文中。使用多线程可以改进此代码吗?
电子邮件的主体创建这样的:
private static string GenerateBody()
{
using (var stringWriter = new StringWriter())
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
htmlWriter.RenderBeginTag("html");
htmlWriter.RenderBeginTag(HtmlTextWriterTag.Head);
htmlWriter.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
htmlWriter.RenderEndTag();
htmlWriter.RenderBeginTag("body");
htmlWriter.Write(
new StringBuilder()
.Append(OverviewParagraph.GenerateHTMLContent())
.Append(PackageWeightParagraph.GenerateHTMLContent())
.Append(BoxWeightParagraph.GenerateHTMLContent())
.Append(CodeQualityParagraph.GenerateHTMLContent())
.Append(ChecksParagraph.GenerateHTMLContent())
.ToString()
);
htmlWriter.RenderEndTag();
htmlWriter.RenderEndTag();
return stringWriter.ToString();
}
}
所有GenerateHTMLContent
方法是几乎相同的 - 他们在我的数据库执行查询,建立一个HTML表的帮助HTMLTextWriter并以字符串形式返回表。
可以将此代码与多线程的使用改善或可能异步等待模式?有问题的代码是我将行追加到StringBuilder对象的地方。
编辑:我问这个问题,因为我从来没有与多线程工作过,只是想知道这是否是可能的。此外,该程序现在运行得足够快。
是在循环中调用此方法的代码?即我猜你正在循环收件人列表并调用上面的代码来生成电子邮件,这是正确的吗?重构的 –
第一步可以使用一个使用()大于2 的另一个问题是,你知道或认为这些方法GenerateHTMLContent是耗时的操作?首先,你有没有做过一些基准测试,以确定它们是否真的是最棒的? – Zenwalker
非常不可能。线程有助于避免冻结用户界面(异步/等待)或在多核CPU上为您购买更多CPU周期。一天一次的程序不太可能具有用户界面。此代码需要更多的dbase服务器和网络带宽,而不是cpu周期。 –