提高C#中大型SQL表的处理速度

时间:2013-09-06 19:47:13

标签: c# .net sql performance .net-3.5

我有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变得非常缓慢。有没有机制来加快这个过程?

谢谢!

2 个答案:

答案 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中重新创建它们。