2009-05-28 16 views
1

私のシナリオは次のとおりです。 1)ユーザーは、LinqDataSource経由でListViewに表示する値を取得するために検索を実行します。 2)詳細を調べることができる別のページに移動するアイテムの1つをクリックします。さらにドリルダウンが発生します。 3)ユーザーは元のリストビューの結果に戻って別のアイテムを選択します。検査。リストビューのデータをキャッシュすることは可能ですか?

ユーザーがListViewに戻るたびにクエリーを複製できるようにクエリーストリングのパラメータを渡すことは可能ですが、結果をキャッシュする方法があるはずです。

私はLinqDataSourceを使っているので、クエリが実行されるたびに実際の結果が取得されると思います。私は現在、e.Resultsに "select new {blah、blah}"タイプのIEnumerableを供給していますが、これは匿名型が設定されているためリストに変換できません。

簡潔に: 1)潜在的に大きなクエリ結果をユーザーセッションに配置しようとすると意味がありますか? 2)そうであれば、合理的なデータ構造をリストアップしていますか? 3)匿名データを保持する正しいプロパティを持つクラスを作成し、クエリの戻り値を列挙し、リストに値を設定したり、 4)このタイプの目的のLinqDataSourceよりも優れたオプションがありますか? 5)ListViewにヒットするたびにクエリを実行するほうが意味がありますか?

明らかでない場合はお詫び申し上げます。空き時間が間違った方向に向かう前に誰かが私をまっすぐにしてもらえると本当にありがたいです:)

+0

私はデータがそれぞれに固有になることを言及する必要がありますクライアント検索。 –

答えて

2

まず、ASP.NETに付属のcaching mechanismを調べることをお勧めします。データは特定のユーザーのために非公開です。

第2に、データベースにクエリを実行する前にキャッシュからデータを取得し、キャッシュにデータを挿入するための有効なポイントを作成するようにアプリケーションを設計することをお勧めします。あなたが実際に違いを生むことを確認するまで、キャッシュに物を入れ始めないでください。

実際にデータの取得に費やされた時間を測定し、違いが生じた場合にキャッシュを使用します。

+0

+1、私は2つの点を逆にします。 :)彼らが問題であることが証明されるまで、彼らがリストビューをヒットする度に、必ずクエリーを実行してください。現代のRDBMSは、多くの人々が彼らの信用を与えるより多くの方法を扱うことができ、しばしば自分のキャッシュ層を提供します! –