class ISMESTagOffsetControl
    {
        //static string _readTagValueMode = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueMode.ToLower();
        //static string _readTagValueTimeOffset = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower();        /// <summary>
        /// 读取配置文件,返回读取历史值的类型 
        /// </summary>        public static SampleOption ReadTagValueMode
        {
            get
            {
                switch (BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueMode.ToLower())
                {
                    case "after":
                        return SampleOption.Sample_After;                    default:
                        return SampleOption.Sample_Before;
                }
            }
        }        /// <summary>
        /// 读取配置文件,返回实时数据库取值偏移时间
        /// </summary>
        public static int TagValueTimeOffset
        {
            get
            {
                return Convert.ToInt32(BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower()) * 1000;
            }
        }
    }
如上面这段代码。一个实例类中定义了两个静态属性,
这两个静态属性的操作是从xml配置文件中读取应用程序中所需要的一些参数的设置。现在有这么一个情况。比如我第一次运行程序的时候,调用了 ISMESTagOffsetControl.TagValueTimeOffset时,假设它返回的值为5000,然后呢,我就根据这个5000去做一些运算了。
当我第二次再运行的时候,我把xml配置文件中这顶TagValueTimeOffset给设置成8,也就是说我现在调用ISMESTagOffsetControl.TagValueTimeOffset时,应该返回的是8000。可是我测试过很多回。发现调用这个属性ISMESTagOffsetControl.TagValueTimeOffset时,永远只会保留第一次调用的值,再怎么改配置文件都不行。就像是缓存一样?
谁能解释下这种情况,
PS:希望以实际经验说明,不要找MSDN上的解释,或者网络上只是纯语法的定义。

解决方案 »

  1.   

    是不是LoadBaseParameterInfo这个函数里面有问题啊,你贴出来看下
      

  2.   

    问题不在这,这段仅仅是把XML配置文件反序列化到对象。
    和这个联动一起的代码很多,要贴这个,恐怕大家看代码都要一定时间了
    现在的问题就是这个静态属性和实例属性的问题
    以及静态字段的问题,也就是我这里注释的两段代码。
     //static string _readTagValueMode = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueMode.ToLower();
            //static string _readTagValueTimeOffset = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower();比如说当我第一次调用进这个类时。
     //static string _readTagValueMode = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueMode.ToLower();
            //static string _readTagValueTimeOffset = BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower();这两个字段的值是否都会生存在应用程序的内存中?
    真到应用程序重启?
      

  3.   

    static静态变量声明符。 在声明它的程序块,子程序块或函数内部有效,值保持
      

  4.   

    不懂web...../// <summary>
    /// 读取配置文件,返回实时数据库取值偏移时间
    /// </summary>
    public static int TagValueTimeOffset
    {
        get
        {
            return Convert.ToInt32(BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower()) * 1000;
        }
    }调试一下?
    BaseParameterFacade
    BaseParameterFacade.LoadBaseParameterInfo()
    BaseParameterFacade.LoadBaseParameterInfo().ReadTagValueTimeOffset.ToLower()
    都分别是什么值?跟一下不就知道怎么回事了?
    不懂web,瞎猜+顶贴+路过+围观。
      

  5.   

    是属性的结果没变?LoadBaseParameterInfo()结果没变说明要么是加了标记没读xml?要么就是xml被替换了?那就说明这里面某个方法没有达到预期的目的,所以就看看这个属性里,用到的变量,方法哪一步和预期的不同。
    哈,我理解的却是慢,没做过web项目,基本的都不知道。哈。等asp.net的朋友看吧。