这是我遇到的问题(简化示例): 假设我有几张桌子:
一个客户可以拥有mamy产品,而一个产品可以拥有多种功能。
在我的asp.net前端,我有一个包含客户信息的网格:
类似的东西:
Name Address
John 222 1st st
Mark 111 2nd st
我需要的是按功能过滤客户的能力。因此,我有一个连接到客户的可用功能的下拉列表。
我目前的做法:
1.我从存储过程返回DataTable
个客户。我把它存放在viewstate中
2.我从存储过程返回与客户连接的DataTable
个功能。我将它存储在viewstate中
3.在选择的过滤器上,我使用新的feature_id过滤器再次运行存储过程,我再次加入以仅显示已选择功能的客户。
我的问题:这很慢。
我认为可能的解决方案是:
1.在页面加载时,返回一个viewstate变量中的所有数据。所以基本上是三个嵌套对象列表。这会使我的页面加载速度变慢。
2.以一种聪明的方式执行异步隐藏。怎么样?
有更好的解决方案吗?
修改
这是一个简化的示例,因此我还需要按照通过6个表连接到表Customer的属性来过滤客户。
答案 0 :(得分:0)
在ViewState中存储整个客户列表将会非常缓慢;在ViewState中存储所有客户的所有信息会更糟,除非您的整个客户群非常小,例如大约30条记录。
首先,为什么要将所有客户加载到ViewState中?如果您有大量客户,请一次加载一页数据。这至少会减少通过线路传输的数据量,并可能加快存储过程的速度。
在您的位置,我将专注于首先优化数据检索(包括最小化您返回的数量),然后担心更快的存储和显示方式。如果你遇到了阻止这种情况的非常规限制(非常慢的数据库;没有分析工具;不允许更改存储过程),请告诉我们。
答案 1 :(得分:0)
解决方案1:在查询中包含您需要筛选的任何条件,仅返回并呈现请求的记录。无需使用viewstate。
解决方案2:检索一些合理的客户页面限制,使用javascript在浏览器上过滤。允许轻松导航到下一页。
答案 2 :(得分:0)
我处理这些场景的方法是将Xml传递给SQL然后针对它运行连接。所以Xml看起来像是:
<Features><Feat Id="2" /><Feat Id="5" /><feat Id="8" /></Features>
然后你可以将那个Xml传递给SQL(取决于SQL的版本有不同的方式),但是在新版本中它比以前容易得多:
http://www.codeproject.com/Articles/20847/Passing-Arrays-in-SQL-Parameters-using-XML-Data-Ty
另外,不要在ViewState中放置任何内容;这真的没有理由。