データをキャッシュしパフォーマンスを向上させる

システムのパフォーマンスを向上させ、ハードウェアの負荷を減らすには、データのキャッシュが有効である場合がある。マスター情報などシステムでほとんど変更されないようなデータを、毎回データベースにとりに行くのはパフォーマンスを下げ、ネットワークやデータベースに負荷をかけることになる。Windowsフォームのようなリッチクライアント型のシステムであれば、頻繁に変更されることのないデータをクライアント側のアプリケーションにキャッシュしておくことによって、高いレスポンスを得ることができる。

下記のサンプルは、キャッシュクラスとその利用例である。キャッシュクラスはSingletonパターンで作成し、インスタンスが複数できないようにしている。キャッシュクラスにShared(Static)のコレクションを持たせ、ここにデータを保持する。これによって、アプリケーションが終了しない限り、キャッシュに保持されたデータをあらゆる局面で取り出すことができる。

下記のサンプルはキャッシュクラスの実装例である。実行できるサンプルは、ダウンロードページからダウンロードできる(CsCache.zip、VbCache.zip)。サンプルはUI層、ビジネスロジック層、DBアクセス層の3階層C/Sアプリケーションである。キャッシュの利用側クラス(サンプルではForm1クラス)は、キャッシュにあるかどうかを意識せず通常どおりビジネスロジック層にデータの取得を依頼する。ビジネスロジック層(MasterServiceクラス)は、キャッシュにデータがあればそれを返す。なければDBアクセス層(MasterTableDacクラス)に処理を委譲し、取得したデータはキャッシュに保持する。


<応用例>
上記のサンプルプログラムでは、一旦、キャッシュの保持されたデータは、アプリケーションが終了しない限り更新されないことになる。ある程度の時間がたてばキャッシュを更新するようにしたい場合は、キャッシュクラスにインスタンスが生成された時刻を保持しておき、値を返す前に経過時間をチェックする仕組みを追加するとよい。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/285

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.