【问题标题】:Gridview Databind Very SlowGridview 数据绑定非常慢
【发布时间】:2013-12-31 04:30:47
【问题描述】:

我使用 asp.net gridview 少量数据加载到网格不是问题,但大量数据加载到网格我面临缓慢问题。如何避免?

我正在使用 sqldataadapter 并填充到数据表并绑定到 gridview

【问题讨论】:

  • 只有一种方法可以避免性能问题:找出耗时过长的问题,然后修复它。您是否确切地确定了代码的哪一部分花费了太长时间?
  • 感谢您的建议

标签: asp.net gridview


【解决方案1】:

我在返回大约 9000 行数据源访问存储过程时遇到了这个问题。 sproc 运行得很快,但是当它被数据绑定到 gridview 时会运行得很慢。

我删除了存储过程中的order by 子句,它很快就亮了。显然,网格想要自己排序。

【讨论】:

    【解决方案2】:

    您将需要执行两个查询,第一个是获取网格视图的所有页面中的记录总数(这是导致数据绑定非常慢的大量数据)。获得此总数后,您需要计算可用于寻呼机控件的总页数。最后,您需要对要从服务器检索的单个数据页面进行查询。

    例如,如果您的网格视图总共有 1,000 行 (SELECT COUNT(*) FROM YourTable),并且您希望页面每页显示 25 行,那么您将有 40 页 (1,000 / 25 = 40) 的数据和任何单个请求一页数据只会返回 25 条记录,而不是全部 1000 条记录。

    有关实现此逻辑的演练,请阅读Efficiently Paging Through Large Amounts of Data


    更新:

    如果你对分页控件不感兴趣,那么你可以实现一个无限滚动类型的界面,当用户向下滚动页面时,从服务器获取下一页数据。阅读Load Content While Scrolling With jQuery了解更多信息。

    【讨论】:

    • 任何没有页面控制的想法
    • @Senthilkumar - 请参阅我的回答中的UPDATE
    【解决方案3】:

    一次显示数千条记录不是一个好主意 - 这可能是性能问题的主要原因。缓解这种情况的一种方法是将数据检索到 DataTable 中,缓存该数据表并在分页中使用它来显示,例如每页 50 条记录。 (这样您就不必为每次页面更改/重新绑定都访问数据库)。

    即使这种方法也适用于有限数量的记录,如果该数量变得巨大 - 即使将所有记录检索到内存 DataTable 中也不是一种选择,您将不得不实现服务器端分页以仅检索一部分数据一次来自数据库。

    也就是说,当从 .NET 代码调用查询而不是在 SSMS 中直接执行时,另一个常见的减速原因可能是参数嗅探。如果 SQL Server 构建和缓存的执行计划对于当前查询执行不是最佳的 - 它可能真的会减慢它的速度。尝试在构建 SQL 语句的代码末尾添加以下行:

    【讨论】:

      【解决方案4】:

      这需要服务器端分页。这意味着您的 gridview 每页将仅加载 10/15 个条目。当您单击下一页时,它将再次访问您的数据库并带来接下来的 10 条记录。设置需要一点时间,但绝对值得。你会有很好的表现。 Efficiently Paging through large results

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 2016-03-21
        • 1970-01-01
        相关资源
        最近更新 更多