【问题标题】:Loading data for GridView from DB, the fastest way for displaying huge amounts of data?从DB加载GridView的数据,显示海量数据的最快方式?
【发布时间】:2016-11-24 10:29:59
【问题描述】:

我正在开发一个应该在 GridView 中显示大量数据的网页。 显然我会使用某种分页。

我想知道做这种事情的最佳方式是什么,规范是什么?

是否应该每次为 GridView 的每一页都连接到数据库?我应该为第一页连接一次数据库并在某种后台任务中加载其余数据吗?我应该在后台提前加载几页数据以减少用户等待时间吗?

感谢任何建议。

请记住,我对编程比较陌生,谢谢!

【问题讨论】:

  • 回答您的所有问题:视情况而定。您可以为每个页面连接到数据库,或者根据您的数据更新频率,您可以保留已经从数据库中获取的数据现金。解决方案将取决于您的软件的使用情况。所以我的建议是从加载分页开始。然后还有一点——你真的需要向用户显示所有数据吗?

标签: c# asp.net sql-server gridview


【解决方案1】:

只需比较首先为您的用户获取完整数据集的概率,以选择合适的解决方案:

  • 如果用户需要您的第二页的可能性不大(最新消息、相关搜索结果等),请不要加载所有数据。只加载第一页。

  • 如果您的数据是顺序处理并且它们是依赖的,那么您真的知道在第一页用户应该/必须进入下一页之后 - 查看解决方案以在用户使用时在后台线程中加载下一页的数据当前页面的数据(处理任务或文件、批准订单等)。

  • 如果您的解决方案意味着 - 您的用户可以随机导航到网格中的页面并且经常这样做(每个用户需要随机访问至少几个页面) - 查看解决方案以将所有数据加载到缓存中并生成寻呼机使用缓存的本地数据。

希望这会有所帮助。

【讨论】:

    【解决方案2】:
    1. 使用您使用的 Control 的虚拟化 - 任何网格或列表!这很重要,#1

    2. 设置中间层服务,帮助您从仅可见的 +/- 上下几行的数据库中加载。您可以通过查询中的游标来执行此操作,或者通过 LINQ 扩展 wirh .Skip(count) 和 Take(count) 进行更简单的操作 - 这可以帮助您从集合的哪个位置实际读取多少行(或者您可以使用如果不使用任何 ORM,LinqPad 如何在 T-SQL 中进行转换)

    3. 不要在 Control(grid 或 listvew)上对您的集合进行排序或过滤,而是通过 DB 端的查询来进行 - 它的索引在 DB 中快很多倍(!)

    【讨论】:

      【解决方案3】:

      使用 SQL Server 存储过程获取大量数据还发送 2 个额外参数分页 Page NumberPage Size 并从过程返回总计数。

      Pagination with the stored procedure

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 2014-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多