【问题标题】:ASP.net: Repeater vs. Dynamic Creation of Table vs. StringBuilder - Performance questionASP.net:Repeater vs. Dynamic Creation of Table vs. StringBuilder - 性能问题
【发布时间】:2009-11-17 16:45:44
【问题描述】:

问题:我的公司目前有一个查询大约需要 3 秒才能运行,但创建表以显示数据需要大约 30 秒才能循环完成。大部分内容很简单:

Dim MainTable as New Table
Dim TableR as New TableRow
Dim TableC as New TableCell
TableCell.Text = "Some data"
TableRow.Controls.Add(TableC)
MainTable.Controls.Add(TableR)

现在,对大约 550 条记录执行此操作的时间约为 30 秒。我尝试将流程更改为使用字符串:

Builder.Append("<tr><td>Something</td></tr>")

但并没有真正的改善。我的问题是关于尝试提高性能。

中继器真的会更快吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    你确定你知道瓶颈在哪里吗?您应该测量实际的循环执行、完成客户端请求所需的时间以及客户端呈现页面所需的时间。

    StringBuilder 循环似乎不太可能花费 30 秒来进行 550 次迭代,除非您在循环中执行不同的、异常昂贵的操作。

    性能下降更有可能是由于:

    1) 将数据从服务器发送到浏览器的时间过长。

    2) 客户端需要很长时间才能实际呈现页面。

    这两种情况通常都有相同的原因 - 您发送给浏览器的 HTML 太大。 (这也可能是因为在 ViewState 中保存了大量内容,这会增加您发送给客户端的数据量。)无论如何,您需要先进行这些测量以找出问题所在。

    【讨论】:

    • 我同意。遍历 550 条记录不可能需要 30 秒。肯定还有更多的事情发生——我的猜测是正在使用数据进行计算,这些计算可能效率低下。
    • 我会检查我的计算。循环内有一些查询,也许有一些效率问题可以在那里处理以减少时间。但是数据绑定控件真的比简单的 StringBuilder 方法更快吗?
    • jlrolin - 数据绑定控件绝对不会比简单的 StringBuilder 方法快。你在正确的轨道上。
    • 我就是这么想的。我只是不确定是否有某种方式可以以某种方式更快地呈现控件。
    【解决方案2】:

    您是否尝试将数据绑定到 gridview 对象?

    【讨论】:

    • 数据按特定 ID 分组,然后按这些分组求和,因此 gridview 不是以这种方式显示它的最佳选择。
    • 如果您可以将数据格式化为单一结构,您可以对数据使用 gridview 并仅为总和(总和)插入一行 - 这样您就可以最大限度地减少创建 HTML 布局所花费的时间。 ..
    • 一个更疯狂的选择——是使用sql查询来生成部分html结构,但我不会这样做....
    【解决方案3】:

    我刚刚回答了另一个问题,用户在尝试绑定到 2k+ 条记录时遇到了类似问题。也许那里有一些提示可以帮助您提高事情的速度:

    Asp.net binding big dataview to DataGrid

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2016-04-09
      相关资源
      最近更新 更多