「アプリケーション アーキテクチャ ガイド 2.0」の実装 - Webアプリのキャッシュ 2

アプリケーション アーキテクチャ ガイド 2.0 の [第 21 章: Web アプリケーションの設計] に
[設計に関する具体的な問題]という項目があります。

今回はWebのキャッシュのうち、アプリケーション データ キャッシュの実装について調べてみました。

まずは参考にとなったチュートリアルについてです。
リンクと、実際にやってみたときのメモを書いておきます。

ASP.NET 内のアプリケーション データのキャッシュ
.NET Framework 4 で新たに追加された、System.Runtime.Cachingを使用。
  以前はSingletonパターンなどを使ってメモリ内に保持する仕組みを自作していたが、
  今後はこれを使うことになるだろう。
・HostFileChangeMonitor オブジェクトを使用してテキスト ファイルの変更を監視する。
・CacheItemPolicyには、ベスト プラクティスとして、常に有効期限を明示的に指定する。

ASP.NET アプリケーションでの複数のキャッシュ オブジェクトの使用
・MemoryCacheクラスを継承したカスタムキャッシュクラスを実装する例。
・ただしデモとしてのみ、領域パーティションという概念を使用している。

上記のチュートリアルでは、単一のファイルを読み込んでキャッシュしていますが
実際のプロジェクトでは複数のファイルをキャッシュしたいことが多いと思います。

そこで
・2つのXMLファイルを読み込みキャッシュに保存する
・有効期限を過ぎた場合か、ファイルが更新されたときに、キャッシュを再取得する
サンプルを作ってみました。

以下、その実装方法とソースです。

1.System.Runtime.Cachingを参照設定に追加する。


2.キャッシュに読み込む2つのXMLファイルを、Web.configがあるフォルダに作成する。

beers.xml
f:id:UnderSourceCode:20130504102938j:plain

whiskies.xml
f:id:UnderSourceCode:20130504102956j:plain


3.Default.aspxに、XMLから読み込んだ値を表示するラベルとボタンを配置する。

Default.aspx
f:id:UnderSourceCode:20130504103007j:plain


4.以下のusing〜を、Default.aspx.csの上に追加する。
using System.Xml;
using System.Text;
using System.Runtime.Caching;
using System.IO;
using System.Collections;


5.XMLを読み込むメソッドを、Default.aspx.csに追加する。

Default.aspx.cs
f:id:UnderSourceCode:20130504103021j:plain


6.ボタン押下時のイベントハンドラ(Button1_Click)内に、処理を追加する。

Default.aspx.cs
f:id:UnderSourceCode:20130504103035j:plain

手順6.について少々解説します。
beers.xml、whiskies.xmlより読み込んだ値をキャッシュに保持するため
これらをSortedListに一旦入れ、そのSortedListをキャッシュのメモリに追加しています。
そのため、キャッシュより取得する値の型は、SortedListとなっています。(28行目)

32〜33行は、キャッシュより値を取得できた場合の処理です。

37〜55行が、XMLファイルの中身をキャッシュにセットする、今回の肝となるところです。

44〜46行で、キャッシュの有効時間を30秒、2つのXMLファイルのどちらかが変更された場合に
キャッシュを削除することを、CacheItemPolicyクラスを使用して指定しています。

48〜49行でXMLファイルを読み込み、51〜55行でキャッシュに保持しています。

最後に58〜59行で値をラベルに表示し、終了です。