webservice中我用Hashtable做缓存,代码如下:
public class Cache
{
internal static Hashtable usersHashtable = new Hashtable();

public static void UpdateCacheUser(IDataObj dataObj)
{
try
{
IDataAccessObj getUser = DAOFactory.getADO(DAOFactory.ADOList.OGetUserById);
UserDO user = (UserDO) getUser.Action(dataObj); if (!usersHashtable.Contains(user.UserId))
{
usersHashtable.Add(user.UserId, user);
}
else
{
//***注意:这里的数据应该先被删除然后在添加新的,但是现在数据一点没有变化,不明白啊!
usersHashtable.Remove(user.UserId);
usersHashtable.Add(user.UserId, user);

}
}
catch (DAOException)
{
}
}
当user对象被修改了,Hashtable中的数据为什么数据没有被remove掉??

解决方案 »

  1.   

    你先不要加上try 和catch 调试看看  可能有些地方出错了
      

  2.   

    跟踪一下usersHashtable.Remove(user.UserId);中UserId是否是你要删除的那个了,还有查资料看看Hashtable删除内容的方法
      

  3.   

    但是为什么我先ht.clear()后在重新赋值getUsers()就没有问题????????
      

  4.   

    但是为什么我先ht.clear()后在重新赋值getUsers()就没有问题????????
      

  5.   

    if (!usersHashtable.Contains(user.UserId))
    {
    usersHashtable.Add(user.UserId, user);
    }
    else
    {                                usersHashtable[user.UserId] = user;

    }
      

  6.   

    if (!usersHashtable.Contains(user.UserId))
    {
    usersHashtable.Add(user.UserId, user);
    }
    else
    {
             usersHashtable[user.UserId] = user;
    }
      

  7.   

    会不会webservice对这种缓存性质的hashtable加锁了?