0

これが私が経験した問題です(単純化された例):いくつかのテーブルがあるとしましょう: ここに画像の説明を入力

1 人の顧客が多数の製品を持つことができ、1 つの製品に複数の機能を持たせることができます。

私のasp.netフロントエンドには、顧客情報を含むグリッドがあります:

このようなもの:

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

私が必要としているのは、機能によって顧客をフィルタリングする機能です。そのため、顧客に関連付けられている利用可能な機能のドロップダウン リストがあります。

現在行っていること:
1.DataTableストアド プロシージャから Customers を返します。ビューステート2 に保存します。ストアド プロシージャから顧客に接続された機能
を返します。DataTableビューステート 3 に保存します。選択したフィルターで、新しい feature_id フィルターを使用してストアド プロシージャを再度実行し、再び結合して機能を選択した顧客のみを表示します。

私の問題: 非常に遅いです。

考えられる解決策は次のとおりだと思い
ます。1.ページの読み込み時に、すべてのデータを1つのビューステート変数に返します。基本的に、ネストされたオブジェクトの 3 つのリストです。これにより、ページの読み込みが遅くなります。2. スマートな方法で非同期ロージングを実行します。どのように?

より良い解決策はありますか?

編集:
これは単純化された例であるため、6 つのテーブルを介してテーブル Customer に接続されているプロパティで顧客をフィルター処理する必要もあります。

4

3 に答える 3

0

解決策 1: クエリにフィルタリングする必要がある条件を含め、要求されたレコードのみを返してレンダリングします。ビューステートを使用する必要はありません。

解決策 2: 顧客の妥当なページ制限を取得し、javascript を使用してブラウザーでフィルター処理します。次のページに簡単に移動できるようにします。

于 2012-10-05T20:19:21.940 に答える
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 に入れないでください。その理由は本当にありません。

于 2012-10-05T20:21:09.833 に答える
0

顧客のリスト全体を ViewState に格納すると、非常に遅くなります。すべての顧客のすべての情報を ViewState に保存することは、顧客ベース全体が非常に小さく (約 30 レコードのように) ない限り、さらに悪化します。

まず、なぜすべての顧客を ViewState にロードするのですか? かなりの数の顧客がいる場合は、一度に 1 ページずつデータを読み込みます。これにより、少なくともネットワーク上を流れるデータの量が減り、ストアド プロシージャも高速化される可能性があります。

あなたの立場では、私は最初にデータ取得の最適化 (返される量の最小化を含む) に焦点を当て、次にそれをより高速に保存および表示する方法について心配します。これを妨げる異常な制約 (データベースが非常に遅い、プロファイリング ツールがない、ストアド プロシージャの変更が許可されていない) に直面している場合は、お知らせください。

于 2012-10-05T20:14:44.897 に答える