首页 新闻 会员 周边

针对web系统设计一个字典类,是否回有并发问题?

0
悬赏园豆:5 [已解决问题] 解决于 2018-01-02 09:22
 1 public class DictDAL
 2 {
 3 public readonly static object locker = new object();
 4 
 5 public static Dictionary<DictTypeEnum, List<DictItem>> Dicts = new Dictionary<DictTypeEnum, List<DictItem>>();
 6 
 7 public List<DictItem> GetDict(DictTypeEnum dictTypeEnum)
 8 {
 9 if (Dicts.ContainsKey(dictTypeEnum))
10 {
11 return Dicts[dictTypeEnum];
12 }
13 else
14 {
15 lock (locker)
16 {
17 //这句判断是为了防止多线程同时请求同一个字典,当第一个字典从数据库加载后 第二个线程直接获取内容
18 if (Dicts.ContainsKey(dictTypeEnum))
19 {
20 return Dicts[dictTypeEnum];
21 }
22 
23 //从数据库的字典表加载对应数据
24 List<DictItem> analogList = new List<DictItem>();
25 analogList.Add(new DictItem() { Text = "名字1", Value = "1" });
26 analogList.Add(new DictItem() { Text = "名字2", Value = "2" });
27 
28 Dicts.Add(dictTypeEnum, analogList);
29 return analogList;
30 
31 }
32 
33 }
34 
35 }
36 
37 }
38 
39 public enum DictTypeEnum
40 {
41 验证手段,
42 性别,
43 装载类型,
44 }

思路是想设计一个字典对象,当第一个页面用到某个字典的时候就从数据库加载,然后以后访问的就直接获取内存的对象,不知道上面的设计在多并发的时候是否会有设计缺陷?就是会引发异常情况出现。

BTW:系统是内部业务系统,正常并发在50-100左右

犇牛牛的主页 犇牛牛 | 初学一级 | 园豆:31
提问于:2017-12-29 15:38
< >
分享
最佳答案
0

可以使用 ConcurrentDictionary

收获园豆:3
dudu | 高人七级 |园豆:30994 | 2017-12-29 15:45

了解过有这个对象,但是还是担忧在并发同时访问同一个 字典类型  然后就会重复取数据并加载 后加载的肯定要报异常。 

所以你说的这个ConcurrentDictionary 只是简单替换我的dictionary吗 

能有具体的设计代码思路吗,谢谢~~

犇牛牛 | 园豆:31 (初学一级) | 2017-12-29 16:04
其他回答(1)
0

ConcurrentDictionary  里面是try update和tryadd

收获园豆:2
吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-29 17:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册