在C#中将具有大量数据的数据表转换为HTML时的性能问题

时间:2019-01-02 22:36:31

标签: c# html datatable

我在C#中具有如下功能:

Set

通过使用存储过程来填充数据表。内容设置为dt后,将调用上面的函数。只要我们的行数少于6000,它的工作速度就会变慢但没有错误。高于〜6000,则返回超时错误。 SP的执行时间还不到2秒。

是否有更好的方法来重新开发这种功能?任何帮助或建议,将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

是否有更好的方法来重新开发这种功能?任何帮助或   建议将不胜感激。

是的,我建议您开始重构代码以使用StringBuilder而不是String,因为循环中的字符串连接相当昂贵。

Using the StringBuilder Class in .NET

  

String对象是不可变的。每次您使用其中一种方法   在System.String类中,您可以在内存中创建一个新的字符串对象,   这需要为该新对象分配新的空间。在   您需要对某项进行重复修改的情况   字符串,与创建新的String对象相关的开销可以   代价高昂。当您使用System.Text.StringBuilder类时,可以使用   想要修改字符串而不创建新对象。例如,   连接时使用StringBuilder类可以提高性能   许多字符串一起循环。

因此,该方法如下所示:

static string ConvertDataTableToHTMLExtra(DataTable dt) 
{
       StringBuilder html = new StringBuilder();
       html.Append("<table>");

       //add header row
       html.Append("<thead>");
       html.Append("<tr>");

       for (int i = 0; i < dt.Columns.Count; i++)
            html.Append("<td>").Append(dt.Columns[i].ColumnName).Append("</td>");

         html.Append("</tr>");
         html.Append("</thead>");

            //add rows
       for (int i = 0; i < dt.Rows.Count; i++)
       {
             html.Append("<tr>");
             for (int j = 0; j < dt.Columns.Count; j++)
                  html.Append("<td>").Append(dt.Rows[i][j]).Append("</td>");
             html.Append("</tr>");
       }

       html.Append("</table>");

       return html.ToString();
}