次の方法で共有


DataSets の使用時のキャッシュ

Crystal Reports for Visual Studio プロジェクトのスケーラビリティを最適化する方法の 1 つとして、プロジェクトで使用される DataSets をキャッシュする方法があります。

DataSets を使用する場合

前のセクションで説明があったように、DataSets が役立つのは次の場合です。

  • DataSets 内のデータをクエリー実行後に修正する必要がある
  • 複数のデータ ソースからデータを組み合わせる必要がある
    Note

    DataSets は XML でデータを表示します。通常はデータベースから表示します。DataSets はデータベース内の単一のテーブルと同等ではなく、むしろテーブルのグループと同等になります。これは、レポートに潜在的なスケーラビリティの問題があることを示しています。レポートが DataSets 内で複数テーブルを取得し、これらのテーブル間を結合させるには、レポートは各テーブルと対話してそれらの結合処理を行う必要があります。これはあまり効率的ではありません。JOIN ステートメントは、DataSets の操作に使用するクエリー内に設定する方が適切です。この結果、DataSets で事前に結合したデータの単一の"擬似テーブル"で、レポートは自由にデータを表示することができるようになります。

DataSets をキャッシュする方法

DataSets はキャッシュされると、スケーラビリティ ツールとしてより便利になります。その理由は次のとおりです。

実行時に、レポートがロードされると、Crystal Reports のレポート エンジンはデータベース接続プールを実行しようとします。たとえば、3 人のユーザーが同じ ASPX ページを同じレポートでヒットすると、1 回のデータベース接続で 3 つのクエリーすべてがプールされます。しかし、クエリーそのものはプールされません。クエリーが 3 つの場合ですべて同じであっても、クエリーはレポート エンジンでレポートがリクエストされるたびに実行する必要があります。時間のかかるクエリーまたはデータの大きなセットでは、ユーザーごとのクエリーはアプリケーションのボトルネックになる場合があります。

ユーザーごとの同じクエリーを何度も実行すると、DataSets を冗長的に操作するので、メモリに負荷がかかり状況はさらに悪くなります。

データベースへのクエリーの実行回数を削減するには、DataSets を最初のクエリーの実行後に ASP.NET Cache オブジェクトに配置し、すべてのレポート ジョブが Cache にある単一の DataSet を共有できるようにします。

Note

DataSets のキャッシュについては、このチュートリアルの追加に記載されています。

関連項目