我的.net4.5
WebRole
项目在本地IIS
(开发目的)和Azure
Cloud service
上运行。
此项目正在处理来自用户的请求。对一个用户的请求可以来自许多客户类型,例如WWW
(托管在IIS
和Azure
上的另一个项目),android app
和windows application
。有一个层将每个请求类型转换为一些以User
为参数的一般请求。 User
是一个实体。
与数据库(MS SQL EXPRESS
或AzureSQL
)进行通信我正在使用EntityFramework
。
问题在于同步。我想对每个用户进行同步请求处理。可能有成千上万的用户,有些用户不活跃,有些用户几乎没有活动,有些用户一直活跃。我想避免一些互斥引起的减速。
这段代码可能有效,但速度极慢:
private Object allUsersMutex = new Object();
private Dictionary<long, Object> perUserMutex = new Dictionary<long, Object>();
private Object getUserMutex (User user) {
synchronized (allUsersMutex) {
if (!perUserMutex.containsKey(user.ID)) {
perUserMutex[user.ID] = new Object();
}
return perUserMutex[user.ID];
}
}
然后,在所有方法中,我可以通过此方法获取互斥并在其上进行同步。
有没有任何机制帮助这样的事情?