【发布时间】:2015-02-23 15:54:54
【问题描述】:
我正在尝试在 ASP.NET 和 C# 中构建产品目录应用程序,该应用程序将允许用户从一系列下拉菜单中选择产品属性,并在网格视图中显示相关产品列表。
页面加载时,从数据库中查询每个下拉菜单的选项,以及网格视图的整个产品目录。目前,该目录包含 6000 多个项目,但我们正在查看可能是应用程序上线时的五六倍。
提取此目录的查询在 SQL Server Management Studio 中执行时运行时间不到一秒,但在网页上呈现需要十秒以上。我们已经尽我们所能优化了查询:只提取将在我们的 gridview 中显示的列(而不是说select * from ...)并将with (nolock) 命令添加到查询中以在不等待更新的情况下提取数据,但还是太慢了。
我查看了SqlCacheDependency,但我能找到的所有方向都假设我使用的是SqlDataSource 对象。我不能这样做,因为每次用户从菜单中进行选择时,都会构建一个新查询并将其发送到数据库以优化显示的产品列表。
我在这里超出了我的深度,所以我希望有人可以提供一些见解。如果您需要更多信息,请告诉我,我会尽快更新。
编辑:仅供参考,分页不是这里的选项。我为之建造的人在这一点上坚定不移。我能做的最好的是将gridview包装在一个div中,溢出:在CSS中自动设置。
如果是这样的话,我正在处理的表不会每隔几个月更新一次以上;有没有办法在客户端缓存这些信息并以这种方式使用它?
【问题讨论】:
-
您应该只加载尽可能多的行 - 查看 paging - 加载 top 50 左右的行 - 不是全部6000!!
-
假设没有输入过滤条件。您是否想同时展示所有 6,000 种产品?为什么?用户不需要一次查看 6,000 个产品。相反,允许用户对数据进行分页,并且只从数据库中检索必要的数据以显示一页的产品价值。
-
@bmurrell30:分页不是一个选项?为什么?
-
绘制 6.000 行永远不会很快。您应该考虑另一种方法(按需滚动,过滤......等)。分页应该是一种选择,因为..我从未遇到过可以在网页上处理 6000 行的用户...
-
问题不在于 Sql Server、查询、表等。您的问题是您想要:通过网络(sql-Server 到您的 IIS)带来 6.000 行,然后将其绘制到网络-页。处理和渲染的数据量过多。这不是一个好习惯。如果您想在不分页或滚动需求的情况下查看 6.000 行,请将您的应用程序更改为 Winforms(甚至很难使用 6.000 行)。
标签: c# asp.net sql-server gridview