我有一個簡單的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週期。 –