- 积分
- 40165
- 好友
- 记录
- 主题
- 帖子
- 听众
- 收听
|
C#使用安全集合ConcurrentDictionary的经典例子
上次文章中有写到“网站[高并发]下使用[静态方法]会造成页面无法访问的解决方案”的文章
主要是说了一些关于解决高并发下使用静态集合的问题
现在升级到4.0以后有了一种新的集合
ConcurrentDictionary就是为了解决上次文章中的问题了,
我们先来看看上次文章中的主要代码吧
[code=csharp]//定义一个委托
private delegate void actionByMain(HttpContext context);
//定义一Key,Value的键值对,大家注意这里把委托放进去了
private static Dictionary<string, actionByMain> mainList = new Dictionary<string, actionByMain>();
public void ProcessRequest(HttpContext context)
{
string action = string.Empty;
if (string.IsNullOrEmpty(context.Request["action"]))
{
return;
}
action = context.Request["action"];
//先检查一下有没有这个action
if (mainList.ContainsKey(action))
{
mainList[action](context); return;
}
}
//添加action对应方法的列表
static void addMainList()
{
mainList.Add("post1", delegate(HttpContext context)
{
context.Response.Write("成功");
});
mainList.Add("post2", delegate(HttpContext context)
{
context.Response.Write("成功");
});
mainList.Add("post3", delegate(HttpContext context)
{
return;
});
}[/code]
这种看过我的文章的都知道会有问题
但是换成安全集合就可以了
因为他 是“表示可由多个线程同时访问的键值对的线程安全集合。”
下面我修改上面代码如下
[code=csharp] //定义一个委托
private delegate void actionByMain(HttpContext context);
//定义一Key,Value的键值对,大家注意这里把委托放进去了
private static ConcurrentDictionary<string, actionByMain> mainList = new ConcurrentDictionary<string, actionByMain>();
public void ProcessRequest(HttpContext context)
{
string action = string.Empty;
if (string.IsNullOrEmpty(context.Request["action"]))
{
return;
}
action = context.Request["action"];
//先检查一下有没有这个action
if (mainList.ContainsKey(action))
{
mainList[action](context); return;
}
}
//添加action对应方法的列表
static void addMainList()
{
mainList.TryAdd("post1", delegate(HttpContext context)
{
context.Response.Write("成功");
});
mainList.TryAdd("post2", delegate(HttpContext context)
{
context.Response.Write("成功");
});
mainList.TryAdd("post3", delegate(HttpContext context)
{
return;
});
}
[/code]
这个集合在using System.Collections.Concurrent;命名空间下,大家要注意添加引用
然后才可以正常使用
|
|