簡體   English   中英

為什么這個循環這么慢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM