开发者

Creating an ASP.Net Table is very slow, is there a better solution?

I have a DataTable with 20.000 row and 15 column. I need to create an ASP.Net Table, my code is similar to this:

//foreach Row in my DataTable do the following:


     TableRow t2Row = new TableRow();

                    TableCell t2Cell0 = new TableCell(); t2Cell0.Text = Count.ToString(); t2Row.Cells.Add(t2Cell0);
                    TableCell t2Cell1 = new TableCell(); t2Cell1.Text = dr["col1"].ToString(); t2Row.Cells.Add(t2Cell1);
                    TableCell t2Cell3 = new TableCell(); t2Cell3.Text = dr["col2"].ToString(); t2Row.Cells.Add(t2Cell3);
                    TableCell t2Cell2 = new TableCell(); t2Cell2.Text = dr["col3"].ToString(); t2Row.Cells.Add(t2Cell2);
                    TableCell t2Cell4 = new TableCell(); t2Cell4.Text = dr["col4"].ToString(); t2Row.Cells.Add(t2Cell4);
                    TableCell t2Cell5 = new TableCell(); t2Cell5.Text = ""; t2Row.Cells.Add(t2Cell5);
                    t2Cell5.ColumnSpan = 4;
                    TableCell t2Cell9 = new TableCell(); t2Cell9.Text = convertMinToTime(dr["col6"].ToString(), dr["col7"].ToString()); t2Row.Cells.Add(t2Cell9);
                    TableCell t2Cell10 = new TableCell(); t2Cell10.Text = dr["col8"].ToString(); t2Row.Cel开发者_StackOverflow社区ls.Add(t2Cell10);
                    TableCell t2Cell11 = new TableCell(); t2Cell11.Text = dr["col9"].ToString(); t2Row.Cells.Add(t2Cell11);
                    TableCell t2Cell12 = new TableCell(); t2Cell12.Text = dr["col10"].ToString(); t2Row.Cells.Add(t2Cell12);
                    TableCell t2Cell13 = new TableCell(); t2Cell13.Text = dr["col11"].ToString(); t2Row.Cells.Add(t2Cell13);

Table my_Table= new Table();
my_Table.Rows.Add(t2Row);

this code works really slow, is there a way to hasten this ?


You could use a Repeater and put a <tr> with the necessary <td>'s in the ItemTemplate.

First check if it really is the building of the table that is taking up a lot of time. My guess is that it is the transferring and rendering of the HTML-code for a table with 20.000 rows and 15 columns that is slowing things down here.


I'd suggest using a databinding approach, where you actually bind your DataTable using a databound-control, such as a GridView or Repeater.

With these controls, you should be making use of the DataSource property and DataBind methods. You don't need to manually add rows to a table etc. Databinding takes care of these fundamentals..


Two thoughts come to mind:

  • Don't retrieve all 20K rows since you can't show all of them anyway. If you need filtering you can go back to the DB once you know what the user is filtering by.

  • Modify the datareaders SQL to have the fields + the other items needed such as the count and empty field and then load the datareader into the datatable (datatable.load)


You might get better performance declaring the entire table in a string of HTML with a single Literal or LiteralControl, and/or putting the declared HTML into it's own user control or reuse. Won't be as flexible but you won't be creating nearly as many objects.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜