情况是这样的,就是我按Ctrl+F5把网站编译了,然后点击下btnVisite控件,会记录我访问公司的次数,可为什么我在关闭网站后再次按Ctrl+F5后,记录的还是我最后一次访问网站的次数在加1呢??假如我上次关闭网站访问的值为29,那么我再次访问的值就会29++=30     .
只有把VS编译器关闭掉才会清零。难道只有在关闭编译器的时候内存才会清零吗,可我用控制台实验了下,为什么控制台每次关闭都再次编译的值就是初始值呢???
最有可能的原因是 readonly 这个关键字,但是也不应该出现上面的情况啊。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Pattern.Singleton
{
    /// <summary>
    /// 防止公司被派生。
    /// 因为派生有可能生成多个公司实例
    /// </summary>
    public sealed class Company
    {
        private static readonly Company instance = new Company();        private Company() { }        static Company() { }        public static Company Instance()
        {
            return instance;
        }        private int visitedNum = 0;        /// <summary>
        /// 访问开发部
        /// </summary>
        /// <returns></returns>
        public string DevelopDept()
        {
            visitedNum++;
            return "访问了开发部";
        }        /// <summary>
        /// 访问行政部
        /// </summary>
        /// <returns></returns>
        public string AdminDept()
        {
            visitedNum++;
            return "访问了行政部";
        }        /// <summary>
        /// 总访问次数
        /// </summary>
        /// <returns></returns>
        public int VisitedNum()
        {
            return this.visitedNum;
        }
    }
}
  protected void btnVisite_Click(object sender, EventArgs e)
    {
        string deptType = "DevelopDept";        string dept = null;        Company company = Company.Instance();
        if (deptType == "DevelopDept")
        {
            dept = company.DevelopDept();
        }
        else if (deptType == "AdminDept")
        {
            dept = company.AdminDept();
        }        int visitedNum = company.VisitedNum();        this.lblResult.Text = dept + " 总共访问次数:" + visitedNum.ToString();
    }

解决方案 »

  1.   

    关闭右下角VS启动的那个IIS服务器再运行看看.
      

  2.   

    你这不是单例模式么??在网站的生命周期内变量会一直保存在内存中一个网页并不是一个exe, 是由.net的内部程序  就相当于你的console程序 去执行所以相对应的,你该点重新编译 控制台你直接关闭了static的数据也就关闭了,但网页你执行完了static中的数据依然会保存,直到资源池释放