我得项目业务很多,我在一个业务得代码中定义了一个静态类,也就是这个业务一进去就创建静态类,可是在某些(可能性2%)得时候这个类里面没有值了,而在绝大多数得时候都是有得,显示错误是为空值
所以这个问题不是跟踪就能解决得,我想问大家,后台得类都在什么情况下会丢失。

解决方案 »

  1.   

    since static data lives as long as the appdomain is alive, so here are some possible causes:1. AppDomain reload2. concurrent access resulting in corruption of data, make sure you use lock when modifying the static data
      

  2.   

    谢谢(思归等)老大们,我得后台得类中得数据中可以区分不同的用户信息写入不同的hashtable的key的value中。但是有的时候还是丢值,我在application_start中加入代码,可以跟踪到这个事件重复的执行。所以我肯定是application重起造成的丢失,但是为什么重起呢?我得后台类中的写法如下
    using System;
    using System.Collections ;
    using RptWinWord;
    using System.Web;
      namespace innerweb
    {
    /// <summary>
    /// SessionToCookie 的摘要说明。
    /// </summary>
    public class SessionToClass
    {
    private Hashtable HashFile;
    private static  SessionToClass classWord;

    private   SessionToClass()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    // HashFile=new Hashtable(); }

    public static SessionToClass create()
    {
    if( classWord==null)
    {
    classWord=new SessionToClass();
    }
    return classWord;
    }


    public void AddWordFileToHash(string keycode,WordFile file1)
    {
    //keyCode 是用户名 +变量名
    string  skeys="";
    string sql="";
    foreach(string key in HashFile.Keys)
    {

    skeys=skeys+key+"";
    }
    string[] tt = new string[]{Global.StaticSqlServer,Global.StaticSqlDataBase, "zbl" , "" };
    GMIS.CommonRightBusinessRule.CCommonInfo gCCommonInfo=new GMIS.CommonRightBusinessRule.CCommonInfo( tt);

    if(file1==null)
    {
    gCCommonInfo.gsExecSql("insert into a000000(Fuserid,ftime,ftype) values('"+gCCommonInfo.AppLoginName+"','"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")+"','"
    +"ADDWORDwrong$"+keycode+"$"+HashFile.Count.ToString() +"$"+skeys +"')");
    }
    HashFile[keycode]=file1;
    foreach(string key in HashFile.Keys)
    {

    skeys=skeys+key+"";
    }
    sql="insert into a000000(Fuserid,ftime,ftype) values('"+gCCommonInfo.AppLoginName+"','"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")+"','"
    +"ADDWORD$"+keycode+"$"+HashFile.Count.ToString() +"$"+skeys +"')";
    gCCommonInfo.gsExecSql(sql);
    } public WordFile  GetWordFileFromHash(string keyCode)
    {
    string  skeys="";
    string sql="";
    foreach(string key in HashFile.Keys)
    {

    skeys=skeys+key+"";
    }
    string[] tt = new string[]{Global.StaticSqlServer,Global.StaticSqlDataBase, "zbl" , "" };
    GMIS.CommonRightBusinessRule.CCommonInfo gCCommonInfo=new GMIS.CommonRightBusinessRule.CCommonInfo( tt);
    sql="insert into a000000(Fuserid,ftime,ftype) values('"+gCCommonInfo.AppLoginName+"','"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")+"','"
    +"GETWORD$"+keyCode+"$"+HashFile.Count.ToString() +"$"+skeys +"')";
    gCCommonInfo.gsExecSql(sql);
    if(HashFile[keyCode]==null)
    {
    gCCommonInfo.gsExecSql("insert into a000000(Fuserid,ftime,ftype) values('"+gCCommonInfo.AppLoginName+"','"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:sss")+"','"
    +"GETWORDwrong$"+keyCode+"$"+HashFile.Count.ToString() +"$"+skeys +"')");
    }
    WordFile file1=(WordFile)HashFile[keyCode]; 
    return file1; }
    public void AddLvWordRuleToHash(string keycode,LVWordRule file1)
    {
    //keyCode 是用户名 +变量名
    HashFile[keycode]=file1; } public LVWordRule   GetLvWordRuleFromHash(string keyCode)
    {
    LVWordRule  file1=(LVWordRule)HashFile[keyCode]; 
    return file1; }
    }
    }
      

  3.   

    private Hashtable HashFile;
    private static  SessionToClass classWord = new SessionToClass();public static SessionToClass create()
    {
      return classWord;
    }public void AddWordFileToHash(string keycode,WordFile file1)
    {
      lock(this) 
      {
        .....
      }
    }
    public WordFile  GetWordFileFromHash(string keyCode)
    {
      lock(this) 
      {
        .....
      }
    }
    public void AddLvWordRuleToHash(string keycode,LVWordRule file1)
    {
      lock(this) 
      {
        .....
      }
    }public LVWordRule   GetLvWordRuleFromHash(string keyCode)
    {
      lock(this) 
      {
        .....
      }
    }