次の方法で共有


通常のレポートとキャッシュされたレポートの選択

Crystal Reports SDK を使用してアプリケーションのビルドを計画するにあたり最も重要な検討事項の 1 つに、通常のレポートとキャッシュされたレポートの選択があります。レポートのキャッシュに影響を与える SDK の基本を理解することにより、目的の Crystal Reports for Visual Studio プロジェクトに最も適した構造を選択できます。

キャッシュされたレポートについて

キャッシュされたレポートとは、パフォーマンスとスケーラビリティの向上を目的として、ASP.NET Cache オブジェクトに保存されているレポート オブジェクトを指します。Crystal Reports は、ReportDocument インスタンスを Cache に置くための特定のフレームワークを提供します。このフレームワークにより、ICachedReport インターフェイスを実装するすべてのレポートが自動的にキャッシュされます。

ASP.NET Cache オブジェクトとは

ASP と ASP.NET のどちらの場合でも、次の 2 つの理由によりレポート オブジェクトは Web サーバー上の Session または Application に置かれます。

  1. ページのリロードにおいてレポート オブジェクトの状態を保持するため。
  2. サイズの大きいレポートやロードに時間のかかるレポートをサーバーのメモリに置くことによって、スケーラビリティとパフォーマンスを向上させるため。

ASP.NET では、Cache と呼ばれる拡張型の Application オブジェクトが導入されています。アプリケーションと同様に、キャッシュもレポート オブジェクトのシングル インスタンスを保持しています。ただし、Cache にはファイル ベース、キー ベース、または時間ベースの従属を検索する情報処理機能が追加されています。Cache 内でこれらの従属が自動的に消滅し、さらにはレポート オブジェクトが最新表示されることによって、Cache の内容が最新の状態に保たれます。

キャッシュに保存されているレポートは、ユーザー固有であるだけでなくセッションにも固有です。

Note

用語“Cache オブジェクト”および“Cache”は、“Session オブジェクト”と“Session”、“Application オブジェクト”と“Application”と同様に、同じ意味で使用されます。“オブジェクト”は、Web サーバー上の .NET フレームワークのメモリ スペースで動作する永続オブジェクトであることを強調する用語です。

ASP.NET Cache オブジェクトへのレポート オブジェクトの配置方法

レポート オブジェクトは、次の 2 つの方法で ASP.NET Cache オブジェクトに配置できます。

  • Session や Application にレポート オブジェクトを割り当てる場合と同じ構文を使用して、レポート オブジェクトを Cache に割り当てます(明示的な割り当て)。
  • ICachedReport インターフェイスを実装するレポートのバージョンをインスタンス化します。レポート エンジンは、このインターフェイスを実装するすべてのレポート オブジェクトを検索し、自動的に Cache に配置します(暗黙的な割り当て)。

ICachedReport インターフェイスとは

ICachedReport インターフェイスは、ICachedReport と Crystal Reports キャッシュ フレームワークとの連携を有効にするすべてのレポート クラスにフラグを付けます。このカスタマイズされたフレームワークは、ASP.NET Cache オブジェクト上に層を提供し、特定のレポート キャッシュの必要性を満たします。

ICachedReport インターフェイスにはメソッドの署名が含まれており、レポート クラスでの実装時にその特定のクラスをキャッシュする方法をフレームワークに指示します。

Visual Studio プロジェクトにレポートを埋め込む際に提供されるレポート キャッシュ機能

Visual Studio プロジェクトにレポートを作成またはインポートすると、そのレポートはプロジェクトに埋め込まれ、自動的に次の 2 つのクラスが生成されます。

  • レポート ラッパー クラス(レポートと同じ名前)。
このラッパー クラスはプロジェクト内のレポートを表わし、ReportDocument を継承します。詳細については、[「埋め込みレポートと埋め込みでないレポートの選択」](ms225520\(v=vs.90\).md)を参照してください。
  • キャッシュ管理ユーティリティ クラス(Cached[ReportName]クラスと名付けられます)。
このキャッシュ管理ユーティリティ クラスは、ASP.NET Cache オブジェクトと Crystal Reports SDK にビルドされるキャッシュ フレームワークを使用して、埋め込みレポートのキャッシュを処理します。

次の表は、Crystal Reports for Visual Studio プロジェクトに Hierarchical Grouping レポート(「サンプル レポートのディレクトリ」を参照)を追加した際に生成される項目の一覧です。

名前
説明
Hierarchical Grouping.rpt
レポート
Hierarchical_Grouping クラス
レポート ラッパー クラス
CachedHierarchical_Grouping クラス
レポート ラッパー クラスのキャッシュ管理に使用されるキャッシュ管理ユーティリティ クラス

次のとおりに、レポート ラッパー クラスとキャッシュ管理ユーティリティ クラスは別々のタスクを担当します。

  • レポート ラッパー クラスは ReportDocument を継承するため、ReportDocument オブジェクト モデル全体へのアクセス権限を持ちます。これは、レポートと対話するためのコア クラスとしてプログラムされます。
  • キャッシュ管理ユーティリティ クラスは、レポート ラッパー クラスのインスタンスを管理し、ASP.NET Cache オブジェクトに保存します。これはレポート ラッパー クラスの個々のインスタンスを識別し、Cache においてそれらのインスタンスが互いに上書きされることを防ぎます。たとえばこのユーティリティ クラスは、パラメータとログオンが変更された際の変更内容を識別します。そのために、このユーティリティ クラスはレポート ラッパー クラスの個々のインスタンスに一意のキーを割り当てます。
  • このユーティリティ クラス自体を Crystal Reports .NET フレームワークのキャッシュ機能と区別するため、キャッシュ管理ユーティリティ クラスは ICachedReport インターフェイスを実装しています。

レポート ラッパー クラスとキャッシュ管理ユーティリティ クラスは、同じクラス ファイルに生成されます。この両方のクラスを表示するには、ソリューション エクスプローラでレポートを右クリックして、[コードの表示]を選択します。ファイルが開き、その最上位にレポート ラッパー クラスのコードが表示されます。キャッシュ管理ユーティリティ クラスのコードは、中間の位置に表示されます。

Note

CrystalReportViewer コントロールをキャッシュ管理ユーティリティ クラスにバインドする方法については、「 キャッシュされた埋め込みレポート クラスへのバインド 」を参照してください。独自のキャッシュ管理ユーティリティ クラスを作成して、埋め込みでないレポートにバインドするには、「キャッシュ管理ユーティリティ クラスにロードされる埋め込みでない Report クラスへのバインド」を参照してください。

レポートをキャッシュする基準

ASP.NET Cache オブジェクトにおけるレポート オブジェクトの割合は低く抑えてください。大部分のレポート オブジェクトは共有性が低く、他のオブジェクトとの共有リソースとして使用されません。したがって、Cache の使用が非効率的になります。永続性が必要な場合には、ユーザーの Session オブジェクトにレポート オブジェクトを置きます。

1 つのセッションで同じユーザーがレポートを何回も表示する場合にのみ、レポート オブジェクトを ASP.NET Cache に配置します。レポート オブジェクトのサイズが極めて大きい場合や、データの取得に数分を要するほど複雑なクエリーを含むレポート オブジェクトの場合には、これは特に重要です。

関連項目