静态列表<user> VS Asp.Net中的在线用户数据库?</user>

时间:2011-02-27 15:52:30

标签: asp.net asp.net-mvc asp.net-membership

我正在构建ASP.Net MVC应用程序“kinda Game”,与在线用户交易很多

我向每个"10s"发送Ajax请求到某些Action,以便在用户保持网站打开时保持用户在线。 对于此Action - ((在静态列表和数据库中),此LastActivityDate 更新 User


所以问题是:

  • 最好将在线用户存储在静态列表中并在用户登录时编写一些代码以将其添加到该列表中,然后每隔"10s"继续管理此列表以启动离线用户。
  • 或者最好是加载在线用户 来自DataBase ,只要我想要OnlineUsers


注意:我正在使用此SO Question中的技术来定期执行一些任务,例如重新管理OnlineUsers静态列表。

3 个答案:

答案 0 :(得分:2)

首先,您不会使用List<User>来代替Dictionary<int,User>,而是使用用户的ID作为密钥,这样您就可以立即找到要更新的用户。其次,我认为这可能是两者的混合。保留当前用户的缓存副本,定期从数据库刷新,并将数据(如果需要,异步)保存到数据库。如果您发现在代码中的各个位置执行此类操作,您可能需要考虑封装此行为的用户的自定义持久性类。

答案 1 :(得分:2)

如果您打算拥有大量用户,并且需要经常从数据库中提取数据,那么最好在Cache中存储用户列表。显然这将存储在服务器的内存中,因此您不希望存储大量对象,但如果它只是一个简单的在线用户列表,则不应该是一个问题。

答案 2 :(得分:1)

static的范围始终是在操作系统中运行的进程的范围。因此在桌面应用程序中使用静态是有意义的。但是,我发现对服务器端应用程序使用静态有点任意,因为您无法控制进程。这是执行此操作的Web服务器。如果流程意外结束怎么办?或者,如果有许多流程为您的应用程序提供服务呢?

因此,数据库的使用是不可避免的。您仍然可以将静态范围作为临时缓存,但不能依赖它。