我有C#代码执行此操作:
// This returns 10,000 rows quite quickly, but displaying them below is slow
DataTable dt = GetUsageStats();
string html = "<table>";
// This part is really slow
foreach (DataRow dr in dt.Rows)
{
html += "<tr>";
html += "<td>" + dr["column1"].ToString() + "</td>";
html += "<td>" + dr["column2"].ToString() + "</td>";
...
html += "<td>" + dr["column5"].ToString() + "</td>";
html += "</tr>";
}
html += "</table>";
由于记录了大约10,000张,因此foreach变得非常缓慢。有没有机制来加快这个过程?
谢谢!
答案 0 :(得分:5)
您想使用StringBuilder。
var sb = new StringBuilder();
for(int i=0; i<10000; i++)
{
sb.Append("somestring");
}
string myString = sb.ToString();
字符串是不可变的。每次将两个字符串连接在一起时,必须将整个结果写入内存。 StringBuilder提供了一种可变的方式来处理字符串,并在某些情况下提供了大量的性能提升。
答案 1 :(得分:3)
StringBuilder类救援
StringBuilder bb = new StringBuilder();
bb.Append("string1");
bb.Append("string2");
bb.Append("string3");
string result = bb.ToString();
StringBuilder()旨在进行修改。字符串是不可变的,因此每次修改它们时都会从scatch中重新创建它们。