【发布时间】:2012-10-05 19:52:02
【问题描述】:
这是我遇到的一个问题(简化示例): 假设我有几张桌子:
一个客户可以拥有多种产品,而一种产品可以具有多种功能。
在我的 asp.net 前端,我有一个包含客户信息的网格:
类似这样的:
Name Address
John 222 1st st
Mark 111 2nd st
我需要的是按功能过滤客户的能力。因此,我有一个与客户相关的可用功能的下拉列表。
我目前在做什么:
1. 我从存储过程中返回了DataTable 的客户。我将它存储在视图状态中
2. 我从存储过程返回DataTable 与客户相关的功能。我将它存储在视图状态中
3. 在选择过滤器时,我再次使用新的 feature_id 过滤器运行存储过程,在该过滤器中我再次加入以仅显示已选择功能的客户。
我的问题:速度很慢。
我认为可能的解决方案是:
1. 在页面加载时,在一个视图状态变量中返回所有数据。所以基本上是三个嵌套对象列表。这将使我的页面加载缓慢。
2. 以某种聪明的方式执行 async loazing。怎么样?
有更好的解决方案吗?
编辑:
这是一个简化的示例,因此我还需要按通过 6 个表连接到表 Customer 的属性过滤客户。
【问题讨论】:
-
您在 ViewState 中存储了整个客户列表?是的......可能不是最好的主意。另外,你说,“我的问题:它很慢。”哪一部分?你列出了 3 个步骤,哪个部分慢?
-
@aquinas,在视图状态中存储整个内容很慢,而且每个过滤操作也很慢,因为它会返回到 db。
-
为什么不能等待用户选择功能,然后从数据库中选择具有该功能的客户。即,做一个分贝旅行?例如,
select * from cutomers where customerid in (select customerid from customerproduct natural join product natural join feature where featureid='whateverTheUserSelected') -
@keyboardP,是的,它有所有正确的索引。
-
@aquinas,因为我需要加载与客户相关的所有功能,所以还有更多的行程。另外,我想默认显示所有客户信息。此外,没有表 customerfeature。
标签: c# asp.net performance c#-4.0 webforms