2
回答
想用一个静态成员做简单的缓存
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

使用mvc web api做app的数据接口。我想要在第一次用户成功登录只有把用户的一些信息存储到一个类的静态成员中。

初始化静态成员

登录验证成功往里面存数据。如果还有同一个账号的其他登录请求过来,先判断静态字典里面是否包含。不包含才加入。

取用户信息。

最终的问题是。登录之后app马上调用获取用户信息的接口可以返回用户信息。稍微等一小会儿,再获取就返回为空了。调用的接口、参数都一样。请问大家问题出在哪里呢?求大家解惑,感激不尽。

<无标签>
举报
CQZ
发帖于3年前 2回/167阅
共有2个答案 最后回答: 3年前

Application_Start的调用并不是绝对一次的,一段时间后可能会再次被调用,所以会重新new一个Dictionary。

本来这种写法就有问题,new对象根本不应该在类的外部调用,而是在类的内部维护,使用一个静态方法去创建这个缓存字典对象,如果已经new过了就不再new了,一个判断就好,另外由于静态共享的,所以在web这种存在并发的环境中,你不加锁真的没问题么?

--- 共有 1 条评论 ---
CQZ本来初始化也不是写在Application_Start()中的,是写在类中private static Dictionary<string,UserInfoDataObject> userInfo=new Dictionary<string,UserInfoDataObject> ();出了问题我就有病乱投医了。以为是这样出的问题就改到app_Start()方法里面去了。至于加锁,还懂不咋起。 3年前 回复
顶部