DataSets の使用時のキャッシュ
Crystal Reports for Visual Studio プロジェクトのスケーラビリティを最適化する方法の 1 つとして、プロジェクトで使用される DataSets をキャッシュする方法があります。
DataSets を使用する場合
前のセクションで説明があったように、DataSets が役立つのは次の場合です。
- DataSets 内のデータをクエリー実行後に修正する必要がある
- 複数のデータ ソースからデータを組み合わせる必要がある
注 DataSets は XML でデータを表示します。通常はデータベースから表示します。DataSets はデータベース内の単一のテーブルと同等ではなく、むしろテーブルのグループと同等になります。これは、レポートに潜在的なスケーラビリティの問題があることを示しています。レポートが DataSets 内で複数テーブルを取得し、これらのテーブル間を結合させるには、レポートは各テーブルと対話してそれらの結合処理を行う必要があります。これはあまり効率的ではありません。JOIN ステートメントは、DataSets の操作に使用するクエリー内に設定する方が適切です。この結果、DataSets で事前に結合したデータの単一の"擬似テーブル"で、レポートは自由にデータを表示することができるようになります。
DataSets をキャッシュする方法
DataSets はキャッシュされると、スケーラビリティ ツールとしてより便利になります。その理由は次のとおりです。
実行時に、レポートがロードされると、Crystal Reports のレポート エンジンはデータベース接続プールを実行しようとします。たとえば、3 人のユーザーが同じ ASPX ページを同じレポートでヒットすると、1 回のデータベース接続で 3 つのクエリーすべてがプールされます。しかし、クエリーそのものはプールされません。クエリーが 3 つの場合ですべて同じであっても、クエリーはレポート エンジンでレポートがリクエストされるたびに実行する必要があります。時間のかかるクエリーまたはデータの大きなセットでは、ユーザーごとのクエリーはアプリケーションのボトルネックになる場合があります。
ユーザーごとの同じクエリーを何度も実行すると、DataSets を冗長的に操作するので、メモリに負荷がかかり状況はさらに悪くなります。
データベースへのクエリーの実行回数を削減するには、DataSets を最初のクエリーの実行後に ASP.NET Cache オブジェクトに配置し、すべてのレポート ジョブが Cache にある単一の DataSet を共有できるようにします。
注 |
---|
DataSets のキャッシュについては、このチュートリアルの追加に記載されています。 |
関連項目
-
このチュートリアルでは、ADO.NET データセットに接続されたレポートを作成して、アプリケーションに表示するコードを記述する方法を学習します。