1

我有执行此操作的 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 变得如此缓慢。有什么机制可以加快这个过程吗?

谢谢!

4

2 回答 2

5

您想使用StringBuilder

var sb = new StringBuilder();
for(int i=0; i<10000; i++)
{
    sb.Append("somestring");
}
string myString = sb.ToString();

字符串是不可变的。每次将两个字符串连接在一起时,都必须将整个结果写入内存。StringBuilder 提供了一种可变的方式来处理字符串,并在某些情况下提供了很大的性能提升。

于 2013-09-06T19:49:16.637 回答
3

StringBuilder 类来救援

StringBuilder bb = new StringBuilder();

bb.Append("string1");
bb.Append("string2");
bb.Append("string3");

string result = bb.ToString();

StringBuilder() 旨在被修改。字符串是不可变的,因此每次修改它们时都会从 scatch 重新创建它们。

于 2013-09-06T19:49:49.667 回答