ASP.NET应用程序应谨慎使用static变量

先来看一个例子:

App_Code/Class1.cs:
using System;

/// <summary>
///Class1 的摘要说明
/// </summary>
public class Class1
{
    public static string URL = string.Empty;
}

Default.aspx:
<%@ Page Language="C#" %>

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

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        Class1.URL = "http://www.mzwu.com/";
        Response.Write(Class1.URL);

    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>static变量测试-Mzwu.Com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:HyperLink ID="HyperLink1" NavigateUrl="~/Default2.aspx" runat="server">Default2.aspx</asp:HyperLink>
    </div>
    </form>
</body>
</html>

Default2.aspx:
<%@ Page Language="C#" %>

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

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Class1.URL);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>static变量测试-Mzwu.Com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

先打开Default.aspx,再打开Default2.aspx,页面会显示什么?空白吗?看一下实际测试结果:



是不是很惊讶?

结论分析

在ASP.NET应用程序中,static变量在站点运行周期内都是有效的,所以它的行为和Application极为相似,而不是Session。因此,不论static变量是在App_Code中,还是在aspx页面和类库中,都会发生上边的现象。所以,在ASP.NET应用程序中应谨慎使用static变量,除非你明确它的用途及其可能发生的后果!

评论: 0 | 引用: 0 | 查看次数: 4298
发表评论
登录后再发表评论!