[英]Static list<User> VS DataBase for Online Users in Asp.Net?
我正在构建ASP.Net MVC应用程序“kinda Game”,它与在线用户打交道很多 。
我让Ajax请求每个"10s"
被"10s"
一些Action
,以便在用户保持站点打开时保持用户在线。 此Action
为此User
更新 LastActivityDate
- ((在静态列表和数据库中))。
所以问题是:
"10s"
保持管理此列表以启动离线用户更好。 OnlineUsers
时从DataBase加载在线用户。 注意:我正在使用此SO问题中的技术来定期执行一些任务,例如重新管理OnlineUsers静态列表。
首先,您不会使用List<User>
,而是使用用户的id作为键来使用Dictionary<int,User>
,这样您就可以立即找到要更新的用户。 其次,我认为这可能是两者的混合。 保留当前用户的缓存副本,定期从数据库刷新,并将数据(如果需要,异步)保存到数据库。 如果您发现在代码中的各个位置执行此类操作,您可能需要考虑封装此行为的用户的自定义持久性类。
如果您打算拥有大量用户,并且需要经常从数据库中提取数据,那么最好将用户列表存储在Cache
。 显然这将存储在服务器的内存中,因此您不希望存储大量对象,但如果它只是一个简单的在线用户列表,那么它应该不是问题。
static的范围始终是在操作系统中运行的进程的范围。 因此在桌面应用程序中使用静态是有意义的。 但是,我发现对服务器端应用程序使用静态有点任意,因为您无法控制进程。 这是执行此操作的Web服务器。 如果流程意外结束怎么办? 或者,如果有许多流程为您的应用程序提供服务呢?
因此,数据库的使用是不可避免的。 您仍然可以将静态范围作为临时缓存,但不能依赖它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.