IIS 7.0 出力キャッシュ

発行日 : 2007 年 11 月 23 日 (作業者 : saad(英語))
更新日 : 2008 年 3 月 13 日 (作業者 : saad(英語))

はじめに

Web コンテンツは、静的コンテンツと動的コンテンツの 2 つのカテゴリに分類できます。静的コンテンツは要求によって変化することはありません。Web ブラウザーに返されるコンテンツは常に同じです。静的コンテンツの例としては、HTML ファイル、JPG ファイル、GIF ファイルなどがあります。

もう 1 つは、動的コンテンツです。これは、要求ごとに変化し、動的に生成されるコンテンツの応答です。例としては、ASP.NET コンテンツや PHP コンテンツなどがあります。

これら 2 つのカテゴリの間には、半動的コンテンツなどの幅広い範囲が存在します。データベース クエリを実行する動的 ASP.NET ページを考えてみましょう。基になるデータベース テーブルがあまり変更されない場合、すべての要求でこのクエリを実行する理由はありません。

IIS 7.0 出力キャッシュ機能は、半動的コンテンツを対象としています。この機能を利用することによって、動的要求に対して静的な応答をキャッシュしたり、非常に大きなスケーラビリティを備えることが可能になります。

この記事には次のような内容が含まれています。

  • 前提条件
  • チュートリアルの概要
  • パート I - 著作権ハンドラーの書き込みと構成
  • パート II - imageCopyrightHandler のパフォーマンス テスト
  • 出力キャッシュの追加
  • 出力キャッシュに関する高度なトピック
  • まとめ

前提条件

このチュートリアルでは、Windows® Vista SP1 または Windows Server® 2008 以降の OS にインストールされた IIS 7.0 が必要です。また、ASP.NET 2.0 を使用します。ASP.NET 2.0 は、IIS 7.0 セットアップでオプションのコンポーネントとしてインストールする必要があります。

チュートリアルの概要

このチュートリアルでは、IIS 7.0 拡張性インターフェイスを使用して、言語固有の著作権メッセージを JPG ファイルに追加します。

そのためには、最初にマネージ ハンドラーを追加します。ここでは、すべての JPG ファイルでマネージ コードが実行されるようにします。これにより、すべての JPG ファイルで著作権メッセージを動的に挿入することにより、処理にコストがかかるようにします。

次に、IIS 7.0 のパフォーマンス分析ツールである WCAT をインストールして、JPG 著作権ハンドラーのスループットを測定します。

その後、出力キャッシュを追加して、著作権ハンドラーの追加によって生じたパフォーマンスの低下を回復します。

パート I - 著作権ハンドラーの書き込みと構成

1. %systemroot%\inetpub\wwwroot ディレクトリの下に pictures というディレクトリを作成します。それには、管理者特権で実行しているコマンド シェルで、次のコマンドを実行します。

md %systemdrive%\inetpub\wwwroot\pictures    

2. いくつかのデジタル画像 (ここでは JPG ファイルを想定) を新しい pictures ディレクトリにコピーします。手元に JPG ファイルがない場合は、http://wallpaper.iis7.org/gallery/iis7-highlight.jpg の画像を使用してください。

: Windows Server 2008 上で Internet Explorer のセキュリティを高にしていると、Web サイトがブロックされたことを示すセキュリティ ダイアログ ボックスが表示されることがあります。IIS 7.0 の壁紙をダウンロードするには、信頼済みサイトの一覧に wallpaper.iis7.org を追加します。

3. appcmd コマンド ライン ツールを使用してアプリケーションを作成します。

%windir%\system32\inetsrv\appcmd add app -site.name:"Default Web Site" 


    -path:/pictures -physicalPath:%systemdrive%\inetpub\wwwroot\pictures

4. pictures ディレクトリの直下にディレクトリ App_Code を作成します。

md %systemdrive%\inetpub\wwwroot\pictures\App_Code

5. メモ帳を開いて次のコードを貼り付けます。

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
          
namespace IIS7Demos
{
    public class imageCopyrightHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string message = "Copyright © IIS 7.0 Team";
            try            {
                string languageHeader;
         languageHeader = context.Request.Headers["Accept-Language"].Substring(0,2).ToUpper();
                switch (languageHeader)
                {
                    case ("DE"):
                       message = "IIS 7.0 Team - Alle Rechte vorbehalten";
                        break;
                    case ("ES"):
                       message = "Marca Registrada IIS 7.0 Team";
                        break;
                    default:
                       break;
                }
            }
            catch 
           { 
                // if something fails, e.g. no Language-Accept header, we go with the english message 
           }
            InsertCopyrightMessage (   context, 
                            message, 
                            "yellow"                            
                        );
        }
        void InsertCopyrightMessage(
                            HttpContext context, 
                            string message, 
                            string color
                         )
        {
            try 
            {
                // get physical path of request 
                string strPath = context.Request.PhysicalPath;
                // load as bitmap 
                Bitmap jpgFile = new Bitmap(strPath);
                // add copyright message 
                Graphics g = Graphics.FromImage(jpgFile);
                Font f = new Font("Arial", 20, GraphicsUnit.Pixel);
                SolidBrush sb = new SolidBrush(Color.FromName(color));
                // write copyright message to bitmap 
                g.DrawString(   message, 
                                f, 
                                sb, 
                                5, 
                                jpgFile.Height - f.Height - 5
                            );
                f.Dispose();
                g.Dispose();
 
                // save it to response stream 
                jpgFile.Save(   context.Response.OutputStream, 
                                System.Drawing.Imaging.ImageFormat.Jpeg
                            );
                jpgFile.Dispose();
            }
            catch (Exception e)
            {
                context.Response.Write(e.Message);
            }
        }
          
        public bool IsReusable
        {
            get { return true; }
        }
    }
} 

このファイルを %systemdrive%\inetpub\wwwroot\pictures\App_Code\imageCopyrightHandler.cs と名前を付けて保存します。

6. JPG ファイルが要求されると、このコードを実行するハンドラーを作成します。

%windir%\system32\inetsrv\appcmd set config /section:system.web.Server/handlers 


    /+[name='imageCopyrightHandler-Integrated',path='*.jpg',


    verb='GET,HEAD',type='IIS7Demos.imageCopyrightHandler',preCondition='integratedMode']

7. まだ既定のドキュメントが存在しないため、ディレクトリ参照を有効にする必要があります。

%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures" 


    -section:directoryBrowse -enabled:true

8. Internet Explorer のアドレス バーに「https://localhost/picures」と入力して、画像アプリケーションを参照します。IIS 7.0 ディレクトリ一覧で JPG ファイルへのリンクをクリックします。著作権メッセージが挿入された JPG 画像が表示されるはずです。

9. コードを確認します。著作権メッセージは、ブラウザーが送信する "Accept-Language" ヘッダーによって異なるようになっています。ドイツ語バージョンの Windows Server 2008 をインストールしている場合、著作権メッセージ "IIS 7.0 Team - Alle Rechte vorbehalten" が表示されます。スペイン語バージョンの場合、"Marca Registrada IIS 7.0 Team" が表示されます。その他の場合、著作権メッセージは "Copyright © IIS 7.0 Team" となります。このコードをテストするには、次の手順を実行して Internet Explorer が送信する "Accept-Language" ヘッダーを変更します。

a. Internet Explorer を開きます。>b. [ツール] メニューを開き、[インターネット オプション] をクリックします。
c. [言語] ボタンをクリックします。
d. [追加] ボタンをクリックして、スペイン語の場合は「es」を、ドイツ語の場合は「de」を追加します。
d. [上へ] ボタンをクリックして、新しい言語をリストの先頭に移動します。
e. https://localhost/pictures/画像ファイル名を参照します。著作権メッセージは、構成した言語に応じて変更されます。
f. [言語] ダイアログ ボックスに戻って設定を元に戻すのを忘れないでください。そのままにしておくと、後でスペイン語またはドイツ語の Web ページが表示されて、原因を突き止めるのに苦労することがあります。

パート II - imageCopyrightHandler のパフォーマンス テスト

JPG 著作権ハンドラーが正しく機能したら、次にコードの速度を調査する必要があります。IIS 6.0 Resource Kit Tool をインストールして、パフォーマンス テストを実行します。

1. IIS 6.0 Resource Kit Tools (英語) をダウンロードしてインストールします。カスタム インストールを実行し、Web Capacity Analysis Tool (WCAT) のみをインストールします。WCAT は、パフォーマンス テストの実行に必要な IIS 6.0 Resource Kit Tool の唯一の機能です。

: Windows Server 2008 上で Internet Explorer のセキュリティを高にしていると、Web サイトがブロックされたことを示すセキュリティ ダイアログ ボックスが表示されることがあります。IIS 6.0 Resource Kit をダウンロードするには、信頼済みサイトの一覧に *.microsoft.com を追加します。

※WCATは単独でダウンロードできる新しいv6.3がIIS.NETから入手可能 (英語)です。下記ではResource Kit ToolsのWCATの手順のままにしてあります。

2. たとえば、PERFTEST という名前のディレクトリを作成します。

md %systemdrive%\perftest

3. WCAT コントローラーには、次の 3 つの入力ファイルが必要です。

  • 要求する URL を WCAT に指示するスクリプト ファイル。URL ごとに一意の ClassID を取得します。
  • スクリプト ファイルで指定されたすべての URL の要求の配布方法を WCAT に指示する配布ファイル。
  • 特定のパフォーマンス実行のパラメーターを構成するための構成ファイル。たとえば、テストの期間、シミュレーションする HTTP クライアントの数などです。

スクリプト ファイル

perftest ディレクトリに script.cfg という名前の新しいファイルを作成し、次のコンテンツをそのファイルに貼り付けます。

NEW TRANSACTION
    classId = 1
    NEW REQUEST HTTP
        Verb = "GET"
        URL = "https://localhost/pictures/<your image name>.JPG"
NEW TRANSACTION
    classId = 2
    NEW REQUEST HTTP
        Verb = "GET"
        URL = "https://localhost/pictures/<your image name>.JPG"     

注 : <your image name> エントリを、使用する JPG ファイル名に置き換えてください。複数の JPG ファイルがある場合は、新しいトランザクションを追加できます。各トランザクションに新しい ClassID を付与してください。

配布ファイル

配布ファイルは、WCAT に対して要求の配分を指示します。ここでは、上記の 2 つの URL に対して 50 対 50 の等しい配布を実行します。各 ClassID に対して、要求時間の 50% が割り当てられます。

perftest ディレクトリに %systemdrive%\perftest\distribution.cfg という名前の新しいファイルを作成し、次のコンテンツをそのファイルに貼り付けます。

1 50
2 50               

構成ファイル

テスト用の推奨パラメーターは、次のとおりです。

  • 期間 : 30 秒
  • ウォームアップ : 5 秒
  • クールダウン : 5 秒
  • シミュレートされる HTTP クライアント数 : 20

perftest ディレクトリに config.cfg という名前の新しいファイルを作成し、次のコンテンツをそのファイルに貼り付けます。

Warmuptime 5s
Duration 30s
CooldownTime 5s
NumClientMachines 1
NumClientThreads 20

4. 次のコマンドを実行してコントローラーを起動します。

Cd \perftest
"%programfiles%\IIS Resources\WCAT Controller\wcctl" 
    -c config.cfg -s script.cfg -d distribution.cfg -a localhost       

すべてのクライアントが接続されると、パフォーマンス テストが開始されます。

5. 1 つのクライアントしかないため、管理者特権で実行する別のコマンド シェルを開いて、次を実行します。

"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost

より多くのクライアントを使用して実行するには、config.cfg で NumClientMachines をより大きな数に設定し、wcclient コマンドでコントローラーのコンピューターの名前を指定することにより、クライアントをコントローラーに接続します。

例 : wcclient MyPerfTestControllerMachine

注 : Windows の 64 ビット バージョンでこれを行う場合、WCAT を "program files (x86)" ディレクトリにインストールして、%programfiles(x86)% を使用して WCAT を開始する必要があります。

5. 最初の実行結果は、次のとおりです。

########################################################################
WCAT Performance Statistics_________________________________
Server                      :      localhost      ()
#Transactions               :              3      (HTTP/1.1)
Total Async Sockets         :             20      (5 WCAT Pool Threads)
Total Elapsed Time          :             30 Secs (0 Hrs,0 Mins,30 Secs)
Current Connections         :             20
Total Connection Attempts   :            436      (   14/Sec)
Total Connect Errors        :              0      (    0/Sec)
Total Success Connections   :            436      (   14/Sec)
Total Consec. Connect Errors:              0      (    0/Sec)
Total Bytes                 :       32301100      ( 1051 KB/Sec)
Total Bytes Written         :          32264      (    1 KB/Sec)
Total Bytes Read            :       32268836      ( 1050 KB/Sec)
Total Requests              :            436      (   14/Sec)
Total Responses             :            436      (   14/Sec)
Total Socket Reads          :           6976      (  232/Sec)
Total Socket Writes         :            436      (   14/Sec)
Total Parse Errors          :              0      (    0/Sec)
Total Socket Errors         :              0      (    0/Sec)
Total I/O Errors            :              0      (    0/Sec)
Total Internal Errors       :              0      (    0/Sec)
Total Time Outs             :              0      (    0/Sec)
Total 200 OK                :            436      (   14/Sec)
Total 30X Redirect          :              0      (    0/Sec)
Total 304 Not Modified      :              0      (    0/Sec)
Total 404 Not Found         :              0      (    0/Sec)
Total 500 Server Error      :              0      (    0/Sec)
Total Bad Status            :              0      (    0/Sec)
Min. Connect Time           :              0 MS
Avg. Connect Time           :              0 MS
Max. Connect Time           :             16 MS
Min. Resp Time (1st Byte)   :           1281 MS
Avg. Resp Time (1st Byte)   :           1371 MS
Max. Resp Time (1st Byte)   :           1578 MS
Min. Response Time (Last)   :           1281 MS
Avg. Response Time (Last)   :           1373 MS
Max. Response Time (Last)   :           1578 MS
Current Outstanding Connects:              0      (   20 Max)
Current Waitable Connects   :              0      (   20 Max)
Total Asynchronous Connects :            531      (    1/Sec)
Total Discarded Connects    :              0      (    0/Sec)
########################################################################
          

重要な数値は、1 秒あたりの要求数です。この例では、1 秒あたり 14 回の要求を処理しています。

警告 : JPG ファイルが大きくなるほど、要求数が少なくなります。この場合、コンピューターでネットワークがボトルネックになっている可能性があります。送信したデータによってネットワークが飽和状態になると、IIS 7.0 はそれ以上の要求を処理できなくなります。200 ~ 300 KB の範囲の JPG ファイルを使用すると最適な結果が得られます。

出力キャッシュの追加

著作権メッセージを動的に挿入するコードはかなり低速です。1 秒あたりの要求が 14 というのは、Web サーバーの処理速度として高速とはいえません。IIS 7.0 には、パフォーマンス向上のための優れた機能が備わっています。必要な作業は、JPG 拡張子を持つ URL をカーネル モード キャッシュに配置するようにキャッシュ ポリシーを作成するだけです。キャッシュ ポリシーを追加する方法は、次のとおりです。

IIS 7.0 管理ツールを使用したキャッシュ ポリシーの追加

  1. [管理ツール] に移動して [インターネット インフォメーション サービス (IIS) マネージャー] を選択します。
  2. 左側のツリー ビュー を使用して、"pictures" アプリケーションに移動します。
  3. [出力キャッシュ] メニュー項目を選択します。
  4. [操作] メニューで [追加] をクリックします。
  5. キャッシュするファイル拡張子として JPG を追加します。
  6. [ファイル キャッシュの監視] セクションで [時間間隔] を選択し、間隔として「00:00:10」と入力します。
  7. [ヘッダー] チェック ボックスをオンにして、「Accept-Language」と入力します。    

注 : 出力キャッシュ ユーザー インターフェイスは、Windows Vista Service Pack 1 以前のバージョンでは使用できません。

コマンド ラインを使用したキャッシュ ポリシーの追加

appcmd ツールを使用して同じ操作を行うには、次のコマンドを入力します。

%windir%\system32\inetsrv\appcmd set config "Default Web Site/pictures" 
    -section:caching /+profiles.[extension='.jpg',duration='00:00:10',
    policy='CacheForTimePeriod',varyByHeaders='Accept-Language']

構成設定の変更によって何がどのように変化するかを調べるため、パフォーマンスの実行を繰り返します。

1. 次のコマンドを実行してコントローラーを起動します。

Cd \perftest
"%programfiles%\IIS Resources\WCAT Controller\wcctl" 
    -c config.cfg -s script.cfg -d distribution.cfg -a localhost
      

2. 次のコマンドを実行してクライアントを起動します。

"%programfiles%\IIS Resources\WCAT Client\wcclient.exe" localhost 
        

注 : Windows の 64 ビット バージョンでこれを行う場合、WCAT を "program files (x86)" ディレクトリにインストールして、%programfiles(x86)% を使用して WCAT を開始する必要があります。

サンプル出力

########################################################################
WCAT Performance Statistics_________________________________
Server                      :      localhost      ()
#Transactions               :              3      (HTTP/1.1)
Total Async Sockets         :             20      (5 WCAT Pool Threads)
Total Elapsed Time          :             30 Secs (0 Hrs,0 Mins,30 Secs)
Current Connections         :             19
Total Connection Attempts   :          13020      (  434/Sec)
Total Connect Errors        :              0      (    0/Sec)
Total Success Connections   :          13019      (  433/Sec)
Total Consec. Connect Errors:              0      (    0/Sec)
Total Bytes                 :      958045737      (31186 KB/Sec)
Total Bytes Written         :         963406      (   31 KB/Sec)
Total Bytes Read            :      957082331      (31155 KB/Sec)
Total Requests              :          13019      (  433/Sec)
Total Responses             :          13019      (  433/Sec)
Total Socket Reads          :         258283      ( 8609/Sec)
Total Socket Writes         :          13019      (  433/Sec)
Total Parse Errors          :              0      (    0/Sec)
Total Socket Errors         :              0      (    0/Sec)
Total I/O Errors            :              0      (    0/Sec)
Total Internal Errors       :              0      (    0/Sec)
Total Time Outs             :              0      (    0/Sec)
Total 200 OK                :          13019      (  433/Sec)
Total 30X Redirect          :              0      (    0/Sec)
Total 304 Not Modified      :              0      (    0/Sec)
Total 404 Not Found         :              0      (    0/Sec)
Total 500 Server Error      :              0      (    0/Sec)
Total Bad Status            :              0      (    0/Sec)
Min. Connect Time           :              0 MS
Avg. Connect Time           :              0 MS
Max. Connect Time           :             63 MS
Min. Resp Time (1st Byte)   :              0 MS
Avg. Resp Time (1st Byte)   :             33 MS
Max. Resp Time (1st Byte)   :            125 MS
Min. Response Time (Last)   :              0 MS
Avg. Response Time (Last)   :             45 MS
Max. Response Time (Last)   :            141 MS
Current Outstanding Connects:              0      (   20 Max)
Current Waitable Connects   :              0      (   20 Max)
Total Asynchronous Connects :          14093      (  147/Sec)
Total Discarded Connects    :              0      (    0/Sec)
########################################################################

出力キャッシュに関する高度なトピック

パフォーマンス カウンター

出力キャッシュのパフォーマンスを確認するには、[信頼性とパフォーマンス モニター] にある出力キャッシュのカウンターを参照します。多数の興味深いカウンターがあります。[信頼性とパフォーマンス モニター] を使用して出力キャッシュを参照する方法は、次のとおりです。

  1. Windows Server 2008 の [スタート] メニューから PERFMON を開始します。それには、[管理ツール] に移動して、[信頼性とパフォーマンス モニター] をクリックします。Vista では、[管理ツール] は [コントロール パネル] にあります。

  2. 右にあるツリー ビューで [パフォーマンス モニター] を選択し、ツール バーの [+] 記号をクリックします。

  3. "Web Service Cache" カウンターを見つけて、クリックして開きます。     

  4. "Total URIs Cached" カウンターを追加します。

  5. WCAT テストに戻ります。

パフォーマンス テスト中に要求する項目数に応じて、キャッシュした URI の数が増加することを確認します。

IIS のカーネル モード キャッシュ規則

IIS 7.0 出力キャッシュでは、2 つのキャッシュ ポリシーをサポートします。標準の出力キャッシュ ポリシーでは、IIS 7.0 ワーカー プロセス内にあるキャッシュを利用します。もう 1 つのキャッシュ ポリシーは、カーネル モードのキャッシュ ポリシーです。このキャッシュは、カーネル モード ドライバーである HTTP.SYS 内にあります。

コンテンツをカーネル モードでキャッシュすると、Web サイトが高速化します。カーネル モード キャッシュを使用するには、pictures アプリケーションの構成を変更します。現在の構成 (%systemdrive%\inetpub\wwwroot\pictures\web.config) は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <directoryBrowse enabled="true" />
        <caching>
            <profiles>
                <add extension=".jpg" policy="CacheForTimePeriod" 
                duration="00:00:10" varyByHeaders="Accept-Language" />
            </profiles>
        </caching>                  
  </system.webServer>
</configuration>

カーネル モード キャッシュを使用するために構成を変更します。

  1. %systemdrive%\inetpub\wwwroot\pictures\web.config を開きます。
  2. 設定を変更します。
<caching>
    <profiles>
            <add extension=".jpg" policy="CacheForTimePeriod" 
                duration="00:00:10" varyByHeaders="Accept-Language" />
        </profiles>
</caching>

上記の設定を次のように変更します。

<caching>
    <profiles>
            <add extension=".jpg" kernelCachePolicy="CacheForTimePeriod" 
        duration="00:00:10" />
        </profiles>
</caching>

varyByHeaders 属性を使用しないことに注目してください。これは、カーネル モード キャッシュでは、ユーザー モードの出力キャッシュではサポートされる一部の機能がサポートされないためです。

カーネル モードの出力キャッシュの制限事項

ユーザー モードの出力キャッシュとカーネル モードの出力キャッシュでは、大きな相違点が 2 つあります。

  • カーネル モードの出力キャッシュでは、認証や承認など、ユーザー モードで実行する必要があるモジュールや機能はサポートされません。たとえば、基本認証や Windows 認証などの認証スキームを有効にした場合、キャッシュ ポリシーは機能しません。コンテンツは処理されますが、キャッシュされません。コンテンツがキャッシュされたかどうかを確認する方法については、「キャッシュのトラブルシューティング」を参照してください。カーネル モードで応答がキャッシュされない原因については、こちらのサポート技術情報を参照してください
  • カーネル モードの出力キャッシュでは、varyByHeaders 属性はサポートされますが、varyByQuerystring はサポートされません。

キャッシュのトラブルシューティング

失敗した要求トレースのバッファー処理 (FRT) は、要求がキャッシュされたかどうかを確認するための最適な方法です。FRT では、キャッシュされない理由が示されます。以下に、FRT ログの例を示します。この場合、HTTPSYS_CACHEABLE イベントによって、カーネル モード キャッシュが有効になっていないことが理由で要求がキャッシュされないことが示されています。

FRT の使用方法の詳細については、この IIS.NET の記事を参照してください。

どのコンテンツがカーネル モードでキャッシュされているかを確認するには、次のコマンドを使用します。

netsh http show cachestate

キャッシュに関する考慮事項

出力キャッシュを有効にしても、要求はすぐにはキャッシュされません。何度か要求が発生した後にはじめて、IIS 7.0 はその要求が "キャッシュする価値がある" と判断します。キャッシュ価値は、ServerRuntimeSection を使用して構成できます。ServerRuntimeSection については、この MSDN の記事 (英語)を参照してください。

キャッシュ価値を決定する 2 つのプロパティは、frequentHitTimePeriod と frequentHitThreshold です。キャッシュ可能な URL に関して、<frequentHitTimePeriod> の期間内に、<frequentHitThreshold> を超える数の要求が到着した場合にはじめてキャッシュされます。

frequentHitTimePeriod の既定値は 10 秒です。

frequentHitThreshold の既定値は 2 です。

頻繁に要求されるページのキャッシュ

前述の例では、拡張子 JPG を持つすべてのファイルを出力キャッシュに置きました。この方法が常に適しているとは限りません。キャッシュ対象をより絞り込んで、特定のドキュメントのみを出力キャッシュに置いたほうがいい場合があります。既定のドキュメントが最も頻繁に要求されるページである場合、そのページを出力キャッシュに置く方法を以下に示します。

1.  %systemdrive%\inetpub\wwwroot\pictures ディレクトリに default.aspx という名前のファイルを作成して、次のコードを追加します。              

<%=DateTime.Now%>

2.  [管理ツール] に移動して [インターネット インフォメーション サービス (IIS) マネージャー] を選択します。
3.  左側のツリー ビュー を使用して、"pictures" アプリケーションに移動します。
4.  ページの最下部にある [コンテンツ ビュー] をクリックします。
5.  既定のドキュメント (default.aspx ページなど) を選択します。
6.  右にある [操作] メニューで [機能ビューに切り替え] をクリックします。構成するすべての設定は、既定のドキュメントのみに適用されます。
7.  [出力のキャッシュ] 設定を開きます。 
8.  ファイル拡張子として ".aspx" を追加します。
9.  [カーネル モード キャッシュ] を選択し、[間隔(hh:mm:ss)] を選択します。間隔として「00:00:30」と入力します。
10. Internet Explorer で、https://localhost/pictures を参照します。ページを継続的に更新します (ブラウザーのキャッシュが再利用されないように Ctrl + F5 キーを押します)。30 秒間、表示時間が変更されないことを確認します。

まとめ

半動的コンテンツに対して IIS 7.0 出力キャッシュ機能を使用することによって、Web サイトの性能を向上させることができます。パフォーマンスとスループットが大幅に向上します。簡単な構成変更によって、この機能を十分に活用できます。