2012-10-05 85 views
0

這裏提高嵌套的對象是我遇到的問題(例如簡化): 比方說,我有幾個表: enter image description here過濾速度

一個客戶可以有瑪米產品和產品可以有多個功能。

在我的asp.net前端我有一個客戶信息網格:

是這樣的:

Name Address 
John 222 1st st  
Mark 111 2nd st 

我需要的是功能來篩選客戶的能力。所以,我有一個連接到客戶的可用功能的下拉列表。

我目前所做的:
1.我從存儲過程返回客戶DataTable。我將它存儲在查看狀態
2.我返回DataTable從存儲過程連接到客戶的功能。我將其存儲在查看狀態 3.在選定的過濾器上,我再次運行存儲過程,並使用新的feature_id過濾器再次加入,以便僅顯示已選擇功能的客戶。

我的問題:這是非常緩慢的。

我認爲可能的解決方案是:
1.在頁面加載時返回一個viewstate變量中的所有數據。所以基本上三個嵌套對象列表。這會使我的網頁加載速度變慢。 2.以一些聰明的方式執行異步loozing。怎麼樣?

任何更好的解決方案?

編輯:
這是一個簡化的例子,因此我也需要由通過6個表來表Customer連接屬性來過濾的客戶。

+0

您在ViewState中存儲了整個客戶列表?是的...可能不是最好的主意。另外,你說,「我的問題:這是非常緩慢的。」哪一部分?你列出了3個步驟,哪個部分很慢? – aquinas

+0

@aquinas,在viewstate中存儲整個內容很慢,同時每個過濾操作都很慢,因爲它返回到db。 – user194076

+0

爲什麼你不能等待用戶選擇功能,然後從數據庫中選擇具有該功能的客戶。也就是說,一分貝旅行?例如,從客戶產品中選擇客戶產品天然連接產品的自然連接功能,其中featureid ='whateverTheUserSelected')' – aquinas

回答

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中;這真的沒有理由。

0

在ViewState中存儲客戶的整個列表將會非常慢;在ViewState中存儲所有客戶的所有信息都會變得更糟,除非您的整個客戶羣非常小,例如約30條記錄。

首先,爲什麼要將所有客戶加載到ViewState中?如果您有大量客戶,請一次加載一頁數據。這至少會減少通過線路傳輸的數據量,並且可能會加速存儲過程。

在你的位置,我會專注於首先優化數據檢索(包括最小化返回的數量),然後擔心更快的方式來存儲和顯示它。如果遇到阻止這種情況的非常規限制(非常慢的數據庫;不需要分析工具;不允許更改存儲過程),請告訴我們。

+0

感謝您的建議。基本上mi想法在視圖狀態下存儲所有項目,原因是我可以過濾客戶而無需返回數據庫。並只適合我的數據表。 – user194076

0

解決方案1:在查詢中包含您需要過濾的所有條件,只返回並呈現請求的記錄。不需要使用視圖狀態。

解決方案2:檢索一些合理的客戶頁數限制,使用javascript在瀏覽器上過濾。允許輕鬆導航到下一頁。