DataSource for Entity Framework for WinForms
大規模なデータセット:仮想モード
設計時の機能 > 大規模なデータセット:仮想モード

大規模なデータセット:ページング」で説明したように、C1DataSource には、大規模なデータや大量の行を処理するためのソリューションとして、ページングよりはるかに優れた機能があります。

数千から数百万もの行を持つ大規模なデータセットを問題なく使用できるとしたらどうでしょうか。ページングを使用せず、コードを変更することもなく、1つのブール値プロパティを設定するだけで、データセットが小規模な場合と同じコントロールを使用して巨大なデータセットを表示できるとしたらどうでしょうか。C1DataSource は、魔法のような VirtualMode プロパティによってこれを実現します。

仮想モードを実装するには、次の手順に従います。

  1. 大規模なデータセット:ページング」の説明で作成したプロジェクトを使用します。前と同様に、同じ ContextType を使用して、C1DataSource コンポーネントを含む新しいフォームを追加します。このフォームをスタートアップフォームにすることで、プロジェクトの実行にかかる時間を短縮することができます。
  2. ViewSourceCollection エディタで ViewSource を作成します。サンプルデータベースの最大のテーブル Order_Details を使用します。
  3. VirtualMode プロパティを Managed に設定します。もう1つの値は Unmanaged ですが、これは使用時に注意が必要な高度なオプションです。必要な場合にのみ使用してください。Managed オプションを設定すると、サーバーからのデータ取得がグリッドコントロールによって管理されます。Managed オプションに設定した場合、C1DataSource は C1FlexGrid と Microsoft DataGridView をサポートします。C1DataSource のパフォーマンスは、これらのグリッドコントロールについて最適化されています。Unmanaged オプションに設定した場合、仮想モードは特定のコントロールに基づいて動作するのではなく、任意の連結コントロールと共に動作しますが、こちらで説明されているように、いくつかの制限が適用されます。
  4. DataGrid をフォームに追加し、その C1DataSource プロパティを C1DataSource に、DataMember プロパティを Order_Details に設定します。
  5. Managed オプションを選択したので、データを操作するグリッドコントロールを指定する必要があります。デザイナでグリッドを選択し、次の図に示されているように、プロパティウィンドウで「ControlHandler on c1DataSource1」という名前のプロパティを見つけます。

    これは拡張プロパティで、フォーム内に C1DataSource コンポーネントが存在する場合にのみ使用できます。VirtualMode プロパティを True に設定します。

  6. アプリケーションを保存、ビルド、および実行します。これほど優れたグリッドはほかにありません。このグリッドで、自由に移動、スクロール、変更を行うことができます。外観も動作も従来のデータグリッドと同様で、それがまさに重要な点です。難点の多いページングもコードの記述もなく、大規模なデータセットを使用できます。さらに、C1DataSource プロパティを持つ任意の GUI コントロールを使用できるという利点があります。この例では、比較的小さなサイズのデータセットを使用しましたが、仮想モードで実行される C1DataSource は、はるかに大きなデータセットでも同様に応答します。その動作が行数に左右されることはありません。その点について確認するために、製品と共にインストールされている OrdersDemo サンプルを見てみます。このサンプルでは、より大きなデータベースが使用されており、その行数は、この例で使用されているデータセットより約 65,000 行多くなっています。ただし、応答速度はどちらも変わりません。このように、C1DataSource の動作は、データセットの行数に左右されません。

なぜ、このようなことが可能なのでしょうか。その動作はページングとかなり似ていますが、内部的な動作は GUI コントロールからは見えず、隠れて行われているページングと言えます。GUI コントロールには、データがクライアントにフェッチされ、使用する準備ができているかのように示されます。GUI コントロールがデータを要求すると、C1DataSource または ClientViewSourceC1DataSource コントロールがなく、コードで ClientViewSource が使用されている場合)は、メモリから、つまりすべての機能に使用されているクライアント側のキャッシュから、データを取得して提供できるかどうかを最初に確認します。メモリにデータが見つからない場合は、要求されたデータをサーバーから透過的にフェッチします。クライアント側のキャッシュを使用する他の機能と同様に、C1DataSource は、フェッチしたデータを無制限には保存しません。無制限に保存すると、メモリリークになってしまいます。C1DataSource は、GUI コントロールに提供する必要があるデータを認識しています。変更されたり、変更された部分に関係するために、保存しておく必要があるデータも認識しています。また、不要になった古いデータを必要に応じて解放します。コードを記述する必要はなく、任意の GUI コントロールを使用できます。