【问题标题】:How can we optimize the records coming in gridview?我们如何优化 gridview 中的记录?
【发布时间】:2010-01-08 08:30:35
【问题描述】:

我想从一个 sqlserver 表的 gridview 中绑定至少 30,000 条记录。我想一次只绑定 50 条记录与网格视图。网格也有分页,当我单击下一页时,应显示接下来的 50 条记录,另一个下一页单击另外 50 条记录。

我该如何优化这个东西。我希望如果绑定了 30,000 条记录,那么网格应该作为绑定的 50 条记录工作。

谢谢,

【问题讨论】:

  • Deepak,您有 6 个其他问题但没有接受任何答案的原因吗?
  • 有什么理由要进一步优化它?您已经在使用优化获取和显示的分页机制。

标签: c# asp.net


【解决方案1】:

正如其他人建议的那样,有很多方法可以做到这一点。 我想添加更多内容

a) 从后端处理(这是我在当前项目中所做的)

--Usage   : USP_DataListing 0,12
ALTER PROCEDURE [dbo].[USP_DataListing] 
    -- Add the parameters for the stored procedure here
    (@StartIndex INT, @ItemsToDisplay INT)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    DECLARE @EndIndex INT
    SET @StartIndex = @StartIndex * @ItemsToDisplay
    SET @EndIndex = @StartIndex + @ItemsToDisplay

    BEGIN
        SELECT 
            SlNo
            ,Column(s)
            FROM (
        SELECT  
         ROW_NUMBER() OVER (ORDER BY GETDATE() DESC) AS SlNo
                ,i.Column(s)                
            FROM dbo.tblName i)X
            WHERE X.SlNo BETWEEN @StartIndex+1 AND @EndIndex
    END

2) 如果您使用的是 dotnet 3.0+ 版本,您可以求助于 linq 的 Take() and Skip()methods

【讨论】:

    【解决方案2】:

    GridView 绑定到ObjectDataSource,并在两者上启用分页。

    在 SQL 端,使用 CTE 选择您需要的行。例如:

    ;WITH MyCTE ([row], [Item]) AS (
        SELECT ROW_NUMBER() OVER (ORDER BY Id) [row], [Item]
            FROM SourceTable
        )
        SELECT [row], [Item]
            FROM MyCTE 
            WHERE [row] BETWEEN @startrow AND @startrow + @pagesize - 1
    

    如果有帮助,我会在我的书中给出一个完整的高性能示例,说明如何使用异步 I/O 并包含代码:Ultra-Fast ASP.NET

    【讨论】:

      【解决方案3】:

      您可以将 GridView 绑定到 LinqDataSource 控件。据我所知,当它处理分页时,它只请求数据库中的可见行,而不是整个表。关于如何将 GridView 绑定到 LinqDataSource here 有很好的文章。

      【讨论】:

        【解决方案4】:

        在 SQL 服务器上处理分页效率更高。如果您只是让 gridview 处理分页,甚至是本地运行的数据源,它会将所有 30,000 条记录从数据库加载到前端,然后检索页面的记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 2015-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多