我们如何优化gridview中的记录?

时间:2010-01-08 08:30:35

标签: c# asp.net

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

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

谢谢,

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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()方法的帮助

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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