[英]Why is this loop so slow?
我已嘗試查找導致此循環如此緩慢的原因,但是我還沒有得到一個好的答案。 以下循環執行需要一分鍾以上的時間:
string answer = "";
string headers = "";
string datarows = "";
bool firstRun = true;
foreach (Dictionary<string, string> row in JSON)
{
datarows += "<tr>";
foreach (KeyValuePair<String, String> cell in row)
{
if (firstRun) { headers += "<th>" + cell.Key + "</th>"; }
datarows += "<td>" + cell.Value + "</td>";
}
datarows += "</tr>";
firstRun = false;
}
answer += "<table><tr>" + headers + "</tr>" + datarows + "</table>";
return answer;
JSON變量是一個List,包含約1150個字典。 每個詞典包含9個鍵值對。 有什么想法嗎?
顯而易見的問題是您的字符串連接。
每次附加到字符串時,實際上就是附加到字符串的副本(因為字符串分別是不可變的)。 這可能是非常昂貴的。
您應該更喜歡使用StringBuilder ,或者為了生成這樣的HTML,您可能需要研究HtmlTextWriter-這將有助於解決HTML的“格式正確”問題。
嘗試使用StringBuilder代替手動連接字符串。
這樣做的方式是,每次在字符串末尾添加更多內容時都要重新評估字符串,並每次都重新構建字符串,這是很昂貴的。 對於這種類型的工作,StringBuilder的效率要高得多。
每當您附加到字符串時,舊字符串都會被銷毀,新字符串將被創建。
因此,字符串疊加的速度越慢,放的越多。
如果換用StringBuilder,則速度會更快。
您是否嘗試過將字符串類型更改為必須連接的StringBuilder?
http://www.dotnetperls.com/stringbuilder-performance
StringBuilder answer = new StringBuilder();
StringBuilder headers = new StringBuilder();
StringBuilder datarows = new StringBuilder();
bool firstRun = true;
foreach (Dictionary<string, string> row in JSON)
{
datarows .Apeend("<tr>");
foreach (KeyValuePair<String, String> cell in row)
{
if (firstRun) { headers.Apeend("<th>" + cell.Key + "</th>"); }
datarows.Append("<td>" + cell.Value + "</td>");
}
datarows.Append("</tr>");
firstRun = false;
}
answer.Append("<table><tr>" + headers + "</tr>" + datarows + "</table>");
return answer.toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.