連載ASP.NET 2.0が変えるWebアプリ開発の世界第8回 新キャッシュ&コールバック機能でパフォーマンス改善山田 祥寛2005/03/26 |
|
前回は、ASP.NET 2.0で導入されたサーバ・コントロール「以外」の新機能として、テーマやプロファイル機能など、主にデザイン部分にかかわる内容を紹介した。
今回はそれに引き続き「パフォーマンス編」として、データベースの内容を変更したタイミングでキャッシュ・データをリフレッシュする「データベース・キャッシング」やページ全体をリフレッシュすることなくポストバックを行う「クライアント・コールバック」を解説する。
●「データベース・キャッシング」でキャッシング機能を強化
.NET TIPS「[ASP.NET]Webフォーム・ページの一部分を断片的にキャッシングするには?」「[ASP.NET]リクエスト・パラメータごとにページをキャッシングするには?」などでも紹介したように、ASP.NETにおける特徴の1つとして、キャッシング機能が充実している点が挙げられる。ASP.NETのキャッシング技術を利用することで、動的ページのキャッシュ処理を限りなくプログラムレスで実現できる。
しかし、ASP.NET 1.xのキャッシング技術には、1つ致命的ともいうべき問題があった。それは、データベースに対してキャッシュ・データの依存関係を設定できない点だ。ASP.NET 1.xではキャッシュ依存を設定しておくことで、依存関係にあるほかのキャッシュ・データやファイルが変更されたタイミングで、キャッシュ・データをリフレッシュすることができる(詳細は、.NET TIPS「[ASP.NET]キャッシュ破棄のタイミングを指定するには?」を参照いただきたい)。しかし、データベースに対しては直接の依存関係を設定できないため、ASP.NET 1.xでは、.NET TIPS「[ASP.NET]データベース更新のタイミングでキャッシュを破棄するには?」でも紹介したような、いささかトリッキーな手法を用いる必要がある。アプリケーションで利用しているデータの多くが、データベース・サーバを基にしていることを考えれば、これはバランスを欠いているとしか思えない仕様であった。
しかし、ASP.NET 2.0では新たにデータベース・キャッシングの機能が追加された。これによって、データベースを変更するタイミングでのキャッシュ更新を、プログラムレスで実現できるようになる。ただし、データベース・キャッシングが対象とするデータベースはMicrosoft SQL Server 7.0以降(MSDEを含む)のみであるので、ご注意いただきたい。
○データベース上でデータベース・キャッシングを有効化する
データベース・キャッシングを利用するには、まず「データベース・キャッシングの有効化」という作業をデータベース上の対象テーブルに対して施す必要がある。
もっとも、有効化の作業はさほどに難しいことではない。.NET Framework SDK 2.0(Visual Studio 2005に含まれる)で提供されるコマンドライン・ツール「aspnet_regsql.exe」を利用して、以下のようなコマンドを発行するだけでよい(spnet_regsql.exeは、デフォルトで「C:\WINDOWS\Microsoft.NET\Framework\<バージョン番号>」フォルダに含まれている)。
|
|
コマンドライン・ツール「aspnet_regsql.exe」の実行方法 | |
-SオプションはSQL Serverの(インスタンス名を含めた)サーバ名、-Uオプションはユーザー名、-Pオプションはパスワード、-dオプションはデータベース名、-tオプションはテーブル名、-edオプションはデータベースに対するキャッシング(SQL cache dependency)の有効化、-edオプションはテーブルに対するキャッシングの有効化を表す。 |
なお、aspnet_regsql.exeを実行するに当たっては、あらかじめSQL Serverのデータベースに対象のテーブル(ここでは、wingsデータベースのmasterテーブル)を作成しておく必要がある。
上記のコマンド実行の結果、以下のように表示されれば成功だ。
|
|
「aspnet_regsql.exe」の実行結果 | |
この実行結果では、最初にデータベースに対してデータベース・キャッシング機能が有効になり、続いてテーブルに対して有効となっている。 |
○アプリケーション上でデータベース・キャッシングを有効化する
次に、アプリケーションに対して、データベース・キャッシングを有効化する必要がある。これは、web.configに以下のような記述を追加していただきたい。
|
|
アプリケーションに対するデータベース・キャッシングの有効化(web.config) |
<connectionStrings>要素は、接続文字列を宣言するための設定要素だ。ここでは、“AppDb”という名前でwingsデータベースへの接続文字列を宣言している。
そして、データベース・キャッシングの具体的な内容を実際に規定しているのが、<caching>要素だ。配下の<sqlCacheDependency>要素でenable属性をtrueに設定することでデータベース・キャッシング機能が有効になる。
また、pollTime属性はASP.NETが変更を検出するためのポーリング周期をミリ秒単位で設定するものだ。キャッシング対象となるデータベースは、配下の<databases>要素で定義することができる。<add>要素のname属性は、後から依存関係を設定するために必要となるキャッシュ名だ。またこの<add>要素のconnectionStringName属性によって、キャッシュ名と先ほど設定した接続文字列(<connectionStringName>要素)とを結び付けているわけである。
○データベース・キャッシングを利用する
以上で、データベース・キャッシング機能を利用するための準備は完了だ。データベース・キャッシングが正常に動作していることを確認するために、以下のようなページを用意してみた。
GridViewコントロールには、wingsデータベースのmasterテーブルから抽出したデータセットが連結してあるものとする(GridViewコントロールやデータソースに関する詳細は、本連載の第4回を参照いただきたい)。
データベース・キャッシング確認用のWebフォーム(dbcache.aspx) |
また、このWebフォーム(dbcache.aspx)をVisual Studio 2005のソース・モードで開いて、次のコード例のように@OutputCacheディレクティブとPage_Loadイベント・プロシージャを追記しておこう。Page_Loadイベント・プロシージャでは、dbcache.aspxに配置したラベル上に現在時刻を表示することとする。
|
|
Webフォーム(dbcache.aspx)への@OutputCacheディレクティブとPage_Loadイベント・プロシージャの追記 |
SqlDependency属性には「キャッシュ名:テーブル」の形式で依存関係にあるテーブルを指定することができる。ここでは、先ほど、web.configで設定した内容に基づいて「sample:master」と指定する。
以上の設定ができたところで、さっそくdbcache.aspxを実行して、データベース・キャッシングが有効になっていることを確認してみよう。
INDEX | ||
ASP.NET 2.0が変えるWebアプリ開発の世界 | ||
第8回 新キャッシュ&コールバック機能でパフォーマンス改善 | ||
1.「データベース・キャッシング」でキャッシング機能を強化 | ||
2.<軽い>ポストバックを実現する「クライアント・コールバック」 | ||
3.クライアント・コールバックを利用した例 | ||
「ASP.NET 2.0が変えるWebアプリ開発の世界」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|