2011-01-27 1 views
0

を、より効率的なものです。一般的には- データグリッドの既存のデータをフィルタリングしながら効率的な方法

- filtering the existing data collection OR 
- querying database with filter clauses 
+1

それが依存、どのくらいのデータを、同じ(データどれだけ近いです同じLANセグメント、同じWAN、世界の反対側に1ダースのホップ以上)、フィルタはより少ないデータではなくより多くのデータをプルします。 – Lazarus

+0

@Lazarus:フィルタのデータ量が少なくて済む – WhoIsNinja

答えて

1

これで、データベースからデータのサブセットを取得し、そのデータをユーザーに提示しました。すべてが世界で素晴らしいです。今、厄介なユーザーは、データにさらにフィルタリングを適用したいと考えています。カーソルを使用して大量のデータセットにアクセスしていないと仮定すると、そのデータはすでにメモリに格納されています。私はそこにそれらをフィルタすることを非常に誘惑されるだろう。

データが急速に変化しておらず、ある程度の陳腐化の可能性が許容されるならば、既に持っているもののサブセットを抽出するためにデータベースに戻るという正当な理由はありません。あなたはすでにワイヤー上のデータを一度引っ張ってしまったのですが、もう一度やり直してください。

データが最新である必要がある場合は、私が言ったことをすべて忘れて、DBに問い合わせてください。

アイデアはおそらく、データアクセスレイヤーによってマーシャリングされる中間の場所です。ここでは、データの経過時間を監視し、ユーザーが同じデータセットのフィルタリングを何時間も変更しても、定期的にデータベースから更新されるようにします。フィルタリングされたデータのリクエストも、このレイヤーに表示する必要があります。つまり、アプリが実際にフェッチされたかどうか、またはメモリから処理されたかどうかはわかりません。このような懸念の分離は、基本的なコードを変更してアプリを変更しないままにすることができるので、どちらか一方のアプローチ(メモリまたはデータベース)

1

データベースは復帰に少ないデータを持っていないという理由だけで、データベースをフィルタリングすることは、より効率的です通常はトランザクションするデータも少なくなります(たとえば、処理するレコードの量を減らすためにインデックスを使用できます)。さらに、ほとんどのインフラストラクチャーでは、データベースはクライアントと同じサーバー上にないため、フィルタリングされていないデータを戻すことに関係する他のリソースもあります。一般的に、より多くのデータを処理する必要があるほど、データベースのフィルタリングが効率的になります。

しかし、コード/クライアントのフィルタリングをより効率的にする状況もありえます。ほとんどの場合、アプリケーションには、データベースが最初に照会しなければならない情報があります。

しかし、これはすべて非常に曖昧で、最終的にはアプリケーションによって異なります。あなたがデータグリッドを持っていて、ユーザーが同じ静的データに関するフィルタを多く変更したとすると、データベースのフィルタリングは、クライアント上のキャッシュされていないデータが効率を上げるという不必要なトラフィックと負荷をdbサーバーにもたらします。

0

既存のデータコレクションを確実にフィルタリングします。

は、既存のDataGridCollectionをフィルタリングするいくつかのソリューションがありますが、私の意見では、最良の解決策は、新しい継承DataGirdタイプを発明または他のサードパーティ製のコントロールに依存することなく、標準のWPF DataGrid制御を有する唯一のスタイルを使用したものです。以下は私が見つけた最高のソリューションです:

関連する問題