我有以下课程:
public class MatchMaker : Hub
{
private readonly ISoloUserRepository soloUsers;
public MatchMaker(ISoloUserRepository userRepo)
{
this.soloUsers = userRepo;
}
//Client Requests
public void findNewPartner(string Name, string Country)
{
SoloUser soloUser = soloUsers.Users.FirstOrDefault(s => (s.Name == Name) && (s.Country == Major));
if (soloUsers.Users.Count > 0){
Clients.partnerRequestResult(soloUsers.Users.FirstOrDefault());
soloUsers.Users.Remove(soloUser);
}
else
{
soloUser = new SoloUser {
Name = Name,
Country = Country
};
soloUsers.Users.Add(soloUser);
}
}
}
我希望能够将soloUsers
对象保留在内存中,因此每当访问此类时,它都会跟踪添加到SoloUser
存储库的soloUsers
个对象。我还没有完全构建我的SoloUserRepository
类,所以我想知道处理这个问题的最佳方法。我是否必须在这个意义上使用数据库来维护添加到集合中的SoloUser
,或者有没有办法将此集合存储在内存中?请记住,不断添加和删除用户。
答案 0 :(得分:0)
我会说集合是大还是小并不重要。这取决于其他因素,例如:
如果您的流程关闭,您是否要求收藏品继续存在?如果没有 - 记忆就可以了;如果可以放松一些数据 - 不时地将内存与持久存储同步;否则 - 使用(不一定是数据库)存储。
有多少线程会访问您的收藏?这是web / cs应用程序的一些后端,对吧?如果是这样 - 那么您将需要一些锁和事件来同步访问。关系数据库通常可以为您处理这些问题。
如果您确定,该集合将保持较小 - 内存将正常。如果它成长会发生什么?将部分进程移动到其他服务器或将持久存储移动到其他服务器会更容易吗?你的惯例会保持足够快吗?