[ ASP.NET ] 出力キャッシュでサーバ処理を軽減させる ( @OutputCache )

Pocket

ASP.NET では、出力キャッシュを使用することで、リクエストのたびにコストの高いサーバ処理を行わずに、キャッシュをレスポンスとして返すことができます。この出力キャッシュを活用することで、パフォーマンスの向上も期待できます。

スポンサーリンク


キャッシュを利用するシナリオ

「Microsoft Web 開発 ガイドライン(リンク切れ)」 では、キャッシュの有効なシナリオとキャッシュの利用を避けたほうが良いシナリオが公開されています。

出力キャッシュが有効なシナリオ

  • 要求ことにビューを更新する必要がなく、ユーザーの独自データが含まれていないなら、動的に生成されるページでは出力キャッシュを利用可能にすべきです。 訪問頻度の高いページやレポートは出力キャッシュが望ましい代表的なシナリオです。

出力キャッシュを避けたほうが良いシナリオ

  • ページのデータにプログラム的にアクセスする必要がある。(代わりにキャッシュ API の使用を検討してください。)
  • ページの種類が多くなりすぎた。
  • 静的データ、動的データ、ユーザー独自データが、ページに混在している。(フラグメントキャッシングの使用を検討してください。)
  • ビューごとにリフレッシュしなければならないコンテンツがページに含まれている。

出力キャッシュの使用方法 ( @OutputCache )

例えば、GET パラメータで日付を取得し、その日付の日次レポートを出力する処理を考えて見ます。以下のサンプルでは、URL と GET パラメータ ( date キー ) ごとに、3600秒(1時間)はキャッシュをレスポンスとして返すサンプルになります。リクエストのたびに日次レポートの作成処理を行うのではなく、1時間はキャッシュの内容をレスポンスで返します。よって、レスポンスの内容はリアルタイムで値は更新されませんが、1時間に1度は更新されるようになります。

ASPX

<%@ Page Language="C#" AutoEventWireup="true" 
         CodeBehind="Default.aspx.cs" 
         Inherits="WebApplication9._Default" %>
<%@ OutputCache Duration="3600" VaryByParam="date"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>OutputCache キャッシュサンプル</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:Label id="Label1" runat="server"></asp:Label> 
    </div>
    </form>
</body>
</html>

C# や VB.NET でプログラミングされたコードビハインド( Page_Load イベントなど )は、キャッシュが切れるたびに呼び出されるように制御されます。キャッシュの内容をレスポンスで返している間は、コードビハインド部は呼び出されません。

参考

Visual C# .NET を使用して ASP.NET でページ出力キャッシュを制御する方法

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>