页面对成员变量共享问题

三碗猪脚 2016-04-21 11:27:51
页面 AdminPage继承BasePage,BasePage继承自System.Web.UI.Page
定义了如下成员变量,
如果使用static关键字,成员函数A,B修改对象的值会相互影响,但是如果是不同的用户访问同一个页面,A用户中的函数是否会影响到B用户的页面对象的值,还所有的用户都是使用的同一个对象?
如果不使用static关键字,每次调用函数A,函数b都要先到数据库中读取一下信息。我的设想是对象u的信息只读取一次,在页面类中每个函数的修改都是在上一个函数修改的基础上操作,不用到数据库查询,如何设计?


AdminPage 类

protected static User u= new User ();

Page_load() 函数 从数据库中读取信息给 对象u

protected 函数A 对对象u操作

protected 函数B 对对象u操作




曾经犯一下错误,我在BasePage定义了一个静态的User对象U,然后在子类中使用User的信息,为了避免反复的去操作数据库,最后发现不同的用户登录看到的信息都不是自己的,都是最后一个用户登录的对象的信息。与自己的设想不一样。

对Static关键字理解的不到位,求教。我是摸着石头过河,见笑了
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
三碗猪脚 2016-04-21
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你的页面 ViewState,或者你的会话 Session集合,或者你的asp.net的 cookie,总之是要能够得到并且保存当前会话对应的 userId 字符串的。然后代码中使用上述函数来获得 User 对象。假设一个系统有10万用户,你怎么可能在软件中写上10万个static User u 代码呢?你当然需要用 userId 来临时获取 User 对象。
ViewState不可行,前一个帖子大哥已指导过了,User不是一个简单类,关联的子类非常多,没有办法序列化,使用Session方式可以,我担心过多占用服务器资源,只保存了UserId这样的信息,不是完整的,不知道大哥提供的缓存的方式是否可行,如果在线用户比较多呢
三碗猪脚 2016-04-21
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
要高速缓存用户信息数据,可以初步地这样写
public UserInfo 获取某用户的信息(string id)
{
    var cache = System.Web.HttpRuntime.Cache;
    var key = "用户__" + id + "的信息";
    var usr = (UserInfo)cache[key];
    if (usr == null)
    {
        usr = 读取数据库查询用户信息(id);
        cache.Insert(key, usr);
    }
    return usr;
}
引用 1 楼 sp1234 的回复:
要高速缓存用户信息数据,可以初步地这样写
public UserInfo 获取某用户的信息(string id)
{
    var cache = System.Web.HttpRuntime.Cache;
    var key = "用户__" + id + "的信息";
    var usr = (UserInfo)cache[key];
    if (usr == null)
    {
        usr = 读取数据库查询用户信息(id);
        cache.Insert(key, usr);
    }
    return usr;
}
谢谢大哥,那缓存的时效,如果用户关闭了页面,如何销毁对象,清理所占的服务器资源?
  • 打赏
  • 举报
回复
你的页面 ViewState,或者你的会话 Session集合,或者你的asp.net的 cookie,总之是要能够得到并且保存当前会话对应的 userId 字符串的。然后代码中使用上述函数来获得 User 对象。假设一个系统有10万用户,你怎么可能在软件中写上10万个static User u 代码呢?你当然需要用 userId 来临时获取 User 对象。
  • 打赏
  • 举报
回复
要高速缓存用户信息数据,可以初步地这样写
public UserInfo 获取某用户的信息(string id)
{
    var cache = System.Web.HttpRuntime.Cache;
    var key = "用户__" + id + "的信息";
    var usr = (UserInfo)cache[key];
    if (usr == null)
    {
        usr = 读取数据库查询用户信息(id);
        cache.Insert(key, usr);
    }
    return usr;
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧