http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9855|回复: 1

[Asp.Net] C#使用安全集合ConcurrentDictionary的经典例子

[复制链接]
发表于 2013-8-19 10:26:09 | 显示全部楼层 |阅读模式
          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;命名空间下,大家要注意添加引用
然后才可以正常使用



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-8-19 10:31:24 | 显示全部楼层
现在没时间看,先留个记号,回头细细品味!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-29 13:22

© 2014-2021

快速回复 返回顶部 返回列表