Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提高嵌套对象过滤速度_C#_Asp.net_Performance_C# 4.0_Webforms - Fatal编程技术网

C# 提高嵌套对象过滤速度

C# 提高嵌套对象过滤速度,c#,asp.net,performance,c#-4.0,webforms,C#,Asp.net,Performance,C# 4.0,Webforms,以下是我遇到的一个问题简化示例: 假设我有几张桌子: 一个客户可以拥有多个产品,而一个产品可以具有多个功能 在我的asp.net前端,我有一个包含客户信息的网格: 大概是这样的: Name Address John 222 1st st Mark 111 2nd st 我需要的是能够按功能筛选客户。因此,我有一个与客户连接的可用功能的下拉列表 我目前的工作: 1.我从存储过程返回客户的数据表。我将其存储在viewstate中 2.我从存储过程返回连接到客户的功能

以下是我遇到的一个问题简化示例: 假设我有几张桌子:

一个客户可以拥有多个产品,而一个产品可以具有多个功能

在我的asp.net前端,我有一个包含客户信息的网格:

大概是这样的:

Name   Address   
John   222 1st st     
Mark   111 2nd st 
我需要的是能够按功能筛选客户。因此,我有一个与客户连接的可用功能的下拉列表

我目前的工作: 1.我从存储过程返回客户的数据表。我将其存储在viewstate中 2.我从存储过程返回连接到客户的功能的数据表。我将其存储在viewstate中 3.在选择过滤器时,我再次使用新功能\u id过滤器运行存储过程,在该过滤器中我再次加入,以仅显示已选择功能的客户

我的问题是:速度很慢

我认为可能的解决办法是: 1.页面加载时返回一个viewstate变量中的所有数据。基本上有三个嵌套对象列表。这将使我的页面加载变慢。 2.以某种智能的方式执行异步浮动。怎么做

有更好的解决办法吗

编辑:
这是一个简化的示例,因此我还需要按通过6个表连接到表customer的属性筛选customer。

在ViewState中存储整个客户列表的速度会非常慢;在ViewState中存储所有客户的所有信息会更糟糕,除非您的整个客户群非常小,比如大约30条记录

首先,为什么要将所有客户加载到ViewState中?如果有大量客户,请一次一页地加载数据。这将至少减少通过网络传输的数据量,并可能加快存储过程的速度


在您的位置上,我将首先关注优化数据检索,包括最小化返回的数据量,然后关注存储和显示数据的更快方式。如果您遇到了不寻常的限制,阻止了这个非常缓慢的数据库;没有剖析工具;不允许更改存储过程,请告知我们

解决方案1:在查询中包含任何需要过滤的条件,只返回并呈现请求的记录。不需要使用viewstate


解决方案2:检索一些合理的客户页面限制,使用javascript在浏览器上进行过滤。允许轻松导航到下一页。

我处理这些场景的方法是将Xml传递到SQL,然后对其运行联接。所以Xml看起来像:

<Features><Feat Id="2" /><Feat Id="5" /><feat Id="8" /></Features>
然后,您可以根据不同的SQL版本将Xml传递到SQL中,但在较新版本中,要比以前容易得多:


另外,不要将任何内容放在ViewState中;这真的没有理由。

您是否在ViewState中存储了完整的客户列表?是的…可能不是最好的主意。还有,你说,我的问题是:速度很慢。哪一部分?您列出了3个步骤,哪个部分比较慢?@aquinas,在viewstate中存储整个内容比较慢,而且每个过滤操作都很慢,因为它会返回到db。为什么您不能等待用户选择该功能,然后从数据库中选择拥有该功能的客户呢。即,进行一次db跳闸?例如,从客户那里选择*从客户那里选择customerid从客户那里选择customerid产品自然连接产品自然连接功能那里featureid='whateverTheUserSelected'@Keyboard,是的,它有所有正确的索引。@aquinas,它还有更多的行程,因为我需要加载所有连接到客户的功能。另外,我想在默认情况下显示所有客户信息。另外,没有桌上定制功能。谢谢你的建议。基本上,我的想法是将所有项目存储在viewstate中,这是因为我可以在不返回数据库的情况下过滤客户。只是在整理我的数据表。