【发布时间】:2014-06-13 02:01:01
【问题描述】:
我正在修复一个网站,该网站广泛使用 DevExpress ASPxGridView 控件来搜索 SQL Server 上的表。然后对结果进行分页和解析。一些搜索结果可能相当大,我怀疑在这些情况下,带有本机 SqlDataSource 的 ASPxGridView 的内置寻呼机速度非常慢。在一次查询中,我观察到 SQL Server 和 IIS Server 之间的网络流量在不到一分钟的时间内达到了 1.5 GB。使用 ORDER BY (SELECT NULL) OFFSET x ROWS FETCH NEXT y ROWS 运行相同的查询只需要一瞬间。在控件上利用这种 SQL 端分页是另一回事。
看来我的局限性和权衡如下:
- DevExpress ASPxGridView 内置分页器无法明确设置项目数。
- 独立的 DevExpress ASPxPager 不支持客户端事件。
- 将 SqlDataSource 替换为 LinqServerModeSource 或 XpoDataSource 仍然需要从 SQL Server 解析整个结果集以获取完整计数,并且可能会遇到同样的性能问题。
如果以下任何一种可能的解决方案,我想提出建议:
- 有什么方法可以强制 DevExpress ASPxGridView 内置寻呼机使用外部计数?
- 有什么方法可以用 Asp.Net UpdatePanel 或 DevExpress ASPxCallbackPanel 封装 DevExpress ASPxPager 以支持客户端事件?
- LinqServerModeSource 或 XpoDataSource 能否从 SQL 查询中收集结果,因为 ASPxGridView 使用其他方式提供的总计数进行分页?
【问题讨论】:
-
你试过this吗?
-
这就是问题 3 的内容,因为在所有 DevExpress 示例中,数据源都是静态表,但在这种情况下,数据源是带有一些全文索引的查询或存储过程。
-
如果您想使用服务器模式,我认为您必须根据该查询创建视图。尽管您可以使用 devex 支持进行检查。
-
全文搜索的条件非常动态,因此不可能有固定的视图。
-
使用 LinqServerModeSource 的另一个挑战是,尽管服务器保持不变,但数据库会发生变化。
标签: asp.net devexpress aspxgridview