gpt4 book ai didi

c# - 如何提高 ASP.Net 动态数据分页性能

转载 作者:行者123 更新时间:2023-11-30 18:41:08 24 4
gpt4 key购买 nike

我正在使用 ASP.Net 动态数据(.Net Framework 4.0 版)和 SQL Server 2008 来显示一组表中的数据。数据库中有一个包含83列854581行数据的主表,预计还会增长。

我对默认模板几乎没有做任何修改,大多数操作对于商业网站来说已经足够敏捷了,包括过滤、外键显示等。但分页器被证明是一个主要的性能问题。

在我使用数据库优化顾问进行任何优化之前,主表列表页面甚至不会显示为简单的计数查询超时。全部优化后,前几百页显示没有问题,但超过1000页就慢得不能忍受,最后一页会超时。

请注意,我已经使用 Database Tuning Advisor 优化了最后一页的查询,这根本没有给我任何建议。

我尝试使用 row_number() 运行一个非常简单的查询查看最后一页,类似于下面的查询:

SELECT TOP 10* FROM 
(SELECT *, row_number() OVER (ORDER BY [Primary Key Column] ASC) AS [rn]
FROM [Master Table]) AS TB1
WHERE TB1.rn > 854580

上面的查询在第一次执行时用了大约 20 秒完成,而 SQL Server 服务 sqlservr.exe占用了 1,700 KiB 的内存(我使用的是 32 位窗口,没有特殊的内核开关,因此,每个进程最多有 2 GiB 的地址空间)。

所以,我的问题是,有没有比使用 row_number() 更有效的方法?在 ASP.Net 动态数据中进行分页以及如何实现它。

我想到了两种可能性:

  1. 有一些神奇的 T-SQL 语言结构具有更好的性能,例如 LIMIT <From row number>, <To row number>在 MySQL 中。
  2. 我在表格中添加了序号列,在没有过滤排序的情况下,根据序号分页

也许更大的问题是如何在 ASP.Net 动态数据中实现这种自定义分页。感谢任何帮助,即使是不旨在提高性能的分页示例,也只是为了给我一个想法。

注意:我无法更改我使用的数据库引擎,所以不推荐 MySQL 或 PostgreSQL 或类似的东西。

最佳答案

即使是 100 万行,20 秒也很长 - 检查您的 SQL Server 索引!

还要确保您只检索 ListView 中所需的数据列。 (你提到了 83 列......你没有在 ListView 中显示所有这些列。

我能想到的另一种方法是使用带有 Skip() 和 Take() 的 Linq 查询表达式在分页时一次获取一个页面。当然,这意味着您将查询更少的数据,但查询的频率更高。

关于c# - 如何提高 ASP.Net 动态数据分页性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com