[ ASP.NET ] アプリケーション状態管理とグローバル静的変数の設定と取得

Pocket

ASP.NET のアプリケーション状態は、すべてのクライアントがアプリケーション全体で使う状態情報の格納に使われます。

マイクロソフトによると、アプリケーション状態はアプリケーション全体で利用され、サーバーに固有のものであり、 読み書き可能なデータも格納できるが、サーバーアフィニティを避けるためには、 呼び出し専用データのみを格納すべきとのことです。

スポンサーリンク

また、アプリケーション状態は ASP ( Active Server Pages ) からの移行を意識した互換性を目的とする部分があり、ASP.NET では使用することは少ないと思います。ASP.NET ではアプリケーション状態(読み出し専用の場合)の代わりに、読み出し専用の静的変数を使用するほうがパフォーマンス的にも有効です。

アプリケーション状態管理と静的変数の使用サンプル

アプリケーション状態を使用するサンプルコードになります。グローバルアプリケーションクラス ( Global.asax ) を追加し、その中でアプリケーション状態管理と静的変数の読み取りを行っています。

VB.NET

Public Class Global_asax
    Inherits System.Web.HttpApplication

    ' グローバル静的変数を使用する場合
    Public Shared app_version As String = "2.0.0.0"

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' アプリケーションの起動時に呼び出されます。
        
        ' アプリケーション状態を使用する場合
        Application("app_version") = "1.0.0.0"

    End Sub
End Class

C#

namespace WebApplication2
{
    public class Global : System.Web.HttpApplication
    {
        // グローバル静的変数を使用する場合 
        static public string app_version = "2.0.0.0";

        protected void Application_Start(object sender, EventArgs e)
        {
            // アプリケーション状態を使用する場合
            Application["app_version"] = "1.0.0.0";
        }
    }
}

アプリケーション状態管理をフォームで読み取る

アプリケーション状態およびグローバル静的変数を各フォームで取得するサンプルコードになります。

ASPX

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>状態管理を読み出す</title>
</head>
<body>
<form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
    </div>
</form>
</body>
</html>

VB.NET

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        ' アプリケーション状態を取得する
        Label1.Text = Application("app_version")  ' 1.0.0.0

        ' グローバル静的変数を取得する
        Label2.Text = Global_asax.app_version     ' 2.0.0.0

    End Sub

End Class

C#

namespace WebApplication2
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // アプリケーション状態を取得する
            Label1.Text = Application["app_version"].ToString(); // 1.0.0.0

            // グローバル静的変数を取得する
            Label2.Text = Global.app_version;                    // 2.0.0.0
        }
    }
}
参考
スポンサーリンク

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>