Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们如何优化gridview中的记录?_C#_Asp.net - Fatal编程技术网

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

C# 我们如何优化gridview中的记录?,c#,asp.net,C#,Asp.net,我想从sqlserver表在gridview中绑定至少30000条记录。我想用grid view一次只绑定50条记录。网格还具有分页功能,当我单击下一页时,应显示下一页的50条记录,另一页的单击另一页的50条记录 我如何优化这个东西。我想,若30000条记录是绑定的,那个么网格应该像绑定的50条记录一样工作 谢谢,在SQL server上处理分页更有效。如果您只是让gridview处理分页,甚至是本地运行的数据源,它会将所有30000条记录从数据库加载到前端,然后检索页面的记录。您可以将grid

我想从sqlserver表在gridview中绑定至少30000条记录。我想用grid view一次只绑定50条记录。网格还具有分页功能,当我单击下一页时,应显示下一页的50条记录,另一页的单击另一页的50条记录

我如何优化这个东西。我想,若30000条记录是绑定的,那个么网格应该像绑定的50条记录一样工作


谢谢,

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

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

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并包括代码:。

按照其他人的建议,有很多方法可以做到这一点。 我想补充一些

a) 从后端处理(这就是我在当前项目中的工作方式)


2) 如果您使用的是dotnet 3.0+版,您可以借助linq的方法

Deepak,您有其他6个问题但没有接受其中任何一个问题的答案吗?您想进一步优化它的原因是什么?您已经在使用分页机制来优化获取和显示。
--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