将大数据集加载到 C# GridView 中的性能问题

2023-12-05

Ok,

一直在我的 GridView 中测试相对较小的数据集,一切都运行良好。然而,我现在已经进入正确的 UAT 并尝试将 17,000 条记录加载到我的网格中,这基本上使我的 Web 应用程序陷入了停滞。

基本上,用户登录并在验证后加载所有数据网格,其中一个包含 17k 条记录。在所有内容加载之前,最终用户都会在登录页面上使用左手。所以我需要修复它。

网格的代码是:

DataTable dtValueDateCurrency = null;               
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Reporting"].ConnectionString);
using (conn)
{
    conn.Open();
    //Load all other grid data
    using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(TSQL1, conn))
    {
        dtValueDateSummary = new DataTable();
        sqlAdapter.Fill(dtValueDateSummary);
        grdValueDateSummary.DataSource = dtValueDateSummary;
        grdValueDateSummary.DataBind();
    }
 }

有没有办法增加加载时间?分页不是一个选项,因为我正在使用 JQuery 来处理这个问题。


在一个查询中加载 17,000 条记录会让你丧命。我强烈建议对 gridview 进行分页。

首先,您需要按如下方式更改存储过程。

ALTER PROCEDURE [dbo].[SomeTable_GetPagedResults] 
( 
        @StartRowIndex      int, 
        @MaximumRows        int 
) 

AS 
SET NOCOUNT ON 

Select 
    RowNum, 
    [ID], 
    [foo],
    [bar]
From 
    (Select 
        [ID], 
        [foo], 
        [bar], 
        Row_Number() Over(Order By [ID] Desc) As RowNum 
        From dbo.[SomeTable] t) 
As DerivedTableName 
Where RowNum Between @StartRowIndex And (@StartRowIndex + @MaximumRows) 

现在您有了一个可分页查询。

您还需要一个查询来获取完整的行数。

ALTER PROCEDURE [dbo].[SomeTable_GetRowCount] 

AS 
SET NOCOUNT ON 

return (Select Count(ID) As TotalRecords From SomeTable) 

每次更改页面时都会绑定网格。

protected void gridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
  gridView1.PageIndex = e.NewPageIndex;
  BindGrid(); // this is whatever method you call to bind your data and execute your stored procedure.
}

And the BindGrid()方法将调用您的两个存储过程(一个用于获取完整的行数,另一个用于获取与当前页面相关的结果)

补充阅读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将大数据集加载到 C# GridView 中的性能问题 的相关文章

随机推荐

  • OpenShift webapps mysql java 连接

    我在 openshift 上有一个 JBoss EWS Tomcat 7 Java 应用程序 与 MySQL 5 5 和 PhpMyAdmin 4 0 盒一起安装 我已将存储库复制到本地 并删除了源文件夹 相反 我只是拥有一个已编译的 Ja
  • gettext 的替代品

    我们在产品中使用 gettext 进行翻译 但遇到了很多问题 除非系统支持 否则无法使用某种语言 在 Solaris 9 Sparc 上 如果我们将环境重置为各种英语语言环境 如果计算机没有相应的语言环境 则消息仍然不会被翻译 翻译文件存在
  • 访问子表单上的 2010 年审计跟踪

    我在获取为审计跟踪找到的代码以使用子表单时遇到问题 原始代码来自http www fontstuff com access acctut21 htm 我宁愿坚持这个代码而不是使用 Allen Browne 的代码http allenbrow
  • 保持 html dom 操作刷新

    我正在尝试仅使用 html 和 javascript 制作评论部分 当用户按下 post 时 我创建一个新的 dom 元素 但是当您刷新时 显然它会消失 我怎样才能让它永久添加 我想在没有数据库的情况下执行此操作 因为我以前从未使用过数据库
  • Xamarin.iOS 中的自定义 SQLite 函数

    我正在 Xamarin iOS 上开发 Sqlite 的自定义功能 我从这里得到答案 在给定半径内的地图上显示标记 Xamarin Android 但我遇到了问题 尝试 JIT 编译方法 包装本机到托管 Mono Data Sqlite S
  • 将 pandas 数据帧转换为字典时,日期从字符串更改为日期时间对象

    我有福尔 数据框 avi fi id dates 2017 07 17 0 318844 zab a 002 2017 07 17 当我将它转换成字典时 我得到 dict avi df reset index to dict records
  • C - 将用户生成的数字转换为单词的问题

    因此 我一直在学习 Kochan 的 C 语言编程 但在其中一个问题上遇到了障碍 如下所示 编写一个程序 获取从终端输入的整数 提取并用英语显示该整数的每一位数字 因此 如果用户输入 932 程序应显示以下内容 九三二 如果是 请记住显示零
  • angular.js:发送一些数据到 php-script

    这是我的 angular js SPA 模板 div div
  • 实体框架/C#:字符串数组中的多个包含?

    如果想使用Include 某些实体框架选择的方法 以避免 对象已释放 异常 但是 Include 只接受一个字符串作为参数 这意味着只包含一个 要进行多重包含 您必须链接包含 Include something Include someth
  • 为什么我的 32 位 Fortran/C DLL 无法在 MSYS2 中编译?

    我正在尝试在 MSYS2 中的 64 位 Windows 7 上编译具有混合 Fortran C 代码的 DLL msys2 x86 64 20160205 与海湾合作委员会 5 3 0 我想编译32位 如果我省略了 效果就很好 m32标志
  • 每个线程使用一个实体框架上下文是否安全? ... 是的?如何?

    可能这是两个问题合二为一 我每个请求使用一个 EF 上下文 但我想每个线程使用一个 EF 上下文 因为我将在请求期间在另一个线程中执行一些复杂的任务 那么 安全吗 如果答案是肯定的 那么该怎么做呢 如何在线程中存储对象并取回它们 先感谢您
  • cassandra通过java中的主键列表查找

    我正在实现一项功能 需要通过主键列表查找 Cassandra 下面是一个示例数据 其中 id 是主键 mytable id column1 1 423 2 542 3 678 4 45534 5 435634 6 2435 7 678 8
  • 将 32 0/1 值打包到单个 32 位变量的位中的最快方法是什么?

    我正在 x86 或 x86 64 机器上工作 我有一个数组unsigned int a 32 所有元素的值为 0 或 1 我想设置单个变量unsigned int b以便 b gt gt i 1 a i 对于所有 32 个元素都成立a 我正
  • 如何将 HIVE 中每个组的多个列聚合到一个 JSON 文件中

    我想将下表转换为包含两行的新表 在新表中 每个user id有一个 JSON 文件来汇总第一个表中的所有其他列 user id reservation id nights price AAA 10001 1 100 AAA 10002 1
  • 安卓。通过 Facebook SDK 4.X 向 facebook Messenger 发送文本

    作为来自 Facebook 的文档 我们可以将图像从 Android 应用程序发送到 Facebook Messenger 如下所示 String metadata image trees ShareToMessengerParams sh
  • Python时间限制

    我有作业要做 我真的需要一个解决方案 从昨天开始我一直在尝试这样做 但我不知道该怎么做 程序必须生成并打印一个字母或数字 然后用户必须尽快键入它并按 ENTER 键 30秒后游戏结束 好吧 我不知道如何限制游戏的时间 我在 stackove
  • 如何使用拖动功能干净地调整 iFrame 的大小?

    我有一个 iFrame 我希望用户能够抓住它的一侧并拖动它来调整它的大小 我不希望它实时调整大小 而是使用指示线 当用户释放时 它会调整大小 我正在使用 jQuery 有什么帮助吗 Iirc 经典的方法是将 IFrame 放入 div 中
  • 使用 Android L 和 Camera2 API 处理相机预览图像数据

    我正在开发一个 Android 应用程序 它处理来自相机的输入图像并将其显示给用户 这个很简单 我注册一个PreviewCallback在相机对象上setPreviewCallbackWithBuffer 这很简单 并且可以与旧的相机 AP
  • 时间序列数据,在cassandra中使用maxTimeuuid/minTimeuuid选择范围

    我最近在 cassandra 中创建了一个键空间和一个列族 我有以下内容 CREATE TABLE reports id timeuuid PRIMARY KEY report varchar 我想根据时间范围选择报告 所以我的查询如下 s
  • 将大数据集加载到 C# GridView 中的性能问题

    Ok 一直在我的 GridView 中测试相对较小的数据集 一切都运行良好 然而 我现在已经进入正确的 UAT 并尝试将 17 000 条记录加载到我的网格中 这基本上使我的 Web 应用程序陷入了停滞 基本上 用户登录并在验证后加载所有数