【数据类型】Dictionary 与 ConcurrentDictionary 待续

Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary<TKey, TValue> 类是作为一个哈希表来实现的。检索速度取决于为 TKey 指定的类型的哈希算法的质量。TValue可以是值类型,数组,类或其他。

线程安全:CSDN上说法:

只要不修改该集合,Dictionary<TKey, TValue> 就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。当出现枚举与写访问互相争用这种极少发生的情况时,必须在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。

读写并行的时候需要加锁,但是加上锁性能就会受影响。

ConcurrentDictionary<TKey, TValue> framework4出现的,可由多个线程同时访问,且线程安全。用法同Dictionary很多相同,但是多了一些方法。ConcurrentDictionary 属于System.Collections.Concurrent 命名空间按照CSDN上所说:System.Collections.Concurrent 命名空间提供多个线程安全集合类。当有多个线程并发访问集合时,应使用这些类代替 System.Collections 和 System.Collections.Generic 命名空间中的对应类型。

一 Dictionary使用

1)实例化  Dictionary<int, string> dic = new Dictionary<int, string>();

添加   dic.Add(1, "one");

提取: string a = dic[1];  //one

键不能重复,值可以重复。

排序: var dicNew=from d in dic order by d.key select d;

时间: 2024-10-08 23:06:12

【数据类型】Dictionary 与 ConcurrentDictionary 待续的相关文章

C#中字典集合HashTable、Dictionary、ConcurrentDictionary三者区别

学习参考博客:http://www.cnblogs.com/yinrq/p/5584885.html 使用Stopwatch类测试耗时代码: using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; namespace WebApp { class Program { static

数据结构:字典

1.定义:字典(dictionary)是一些元素的结合.每个元素有一个称作key的域,不同元素的key各不相同. 其抽象数据类型描述为: 抽象数据类型Dictionary { 实例: 具有不同关键字的元素组合 操作: Create():创建一个空字典 Search(k,x):搜索关键字为k的元素 Insert(x):插入元素 Delete(k,x):删除关键字为k的元素 } 有重复元素的字典(dictionary with duplicates)与上面定义的字典相似,只是它允许多个元素有相同的关

Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)

当使用Objective-C的时候,你总会遇到Foundation 框架中的一些类,这些类包括NSString,NSNumber,NSArray和NSDictionary,这些数据结构都是自解释的. Objective-C以简明详细的语法而著名,自从oc1.0有一个简单的方式定义一个NSString变量,我们可以这样声明一个字符串变量 NSString *[email protected]"Hello Lves"; 没有这种语法之前,我们创建一个字符串变量需要先alloc然后init.

使Web API支持namespace

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 问题描述 假设我有一个应用场景:Core Framework可以用于任何区域的站点,其中的CustomersController有个取customer的fullname的方法GetFullName(),可想而知,这个api在中国和美国的站点上,

C#高级编程六十三天----并行LINQ

并行LINQ .NET4在System.Linq命名空间中包含一个新类ParallelEnumerable,可以分解查询的工作使其分布在多个线程上.尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallelQuery<TSource>类的扩展.一个重要的例外是AsParallel()方法,它扩展了IEnumerable<TSource>接口,返回ParallelQuery<

C#解决 动态创建库、动态创建表

在11月10号.我们开始着手做高校平台这个项目,这个项目里面,有很多的子系统.权限系统.基础系统.考试系统-- 既然是高校平台,当然不只是一个学校用的,可以很多的学校公用.既然如此,每个学校所要保存的数据当然不可能存放在一个库中.一个学校一个库,那么有几个学校用呢?未知.库的数量得视情况而定.动态创建库可以解决这种问题. 当然,系统有很多.但是个人只是参与子系统的开发.在之前一直在考试系统里面打杂.这个项目分配下来了之后,我也就开始由打杂换了一种方式去打杂. 在做项目的过程中,任务的分配是非常明

5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq

在上一篇博客5天玩转C#并行和多线程编程 —— 第一天 认识Parallel中,我们学习了Parallel的用法.并行编程,本质上是多线程的编程,那么当多个线程同时处理一个任务的时候,必然会出现资源访问问题,及所谓的线程安全.就像现实中,我们开发项目,就是一个并行的例子,把不同的模块分给不同的人,同时进行,才能在短的时间内做出大的项目.如果大家都只管自己写自己的代码,写完后发现合并不到一起,那么这种并行就没有了意义. 并行算法的出现,随之而产生的也就有了并行集合,及线程安全集合:微软向的也算周到

20151027c#3

string string str1="aaa"; str1+="bbbb" 一旦字符串创建后就不能修改了,+=时会在堆里重新开辟空间aaabbbb,非常耗费资源 StringBuilder System.Text;//命名空间 StringBuilder sb = new StringBuilder(); sb.Append("aaa"); sb.Append("bbb"); Console.WriteLine(sb.ToS

C#自学基础

1.  .net/dotnet:一般指.Net Framewwork框架.一种平台,一种技术 C#一种编程语言,可以开发基于.net平台的应用 2.  .net  都能干什么 桌面应用程序 Winform Internet应用程序,ASP.NET/WedServoce 手机开发 wp7 3.   C/S 客户机/服务器模式 B/S 浏览器/服务器模式 4.  方法在类里面,类在命名空间里面 1个项目只能有Main方法 ,Main方法是我们项目的入口方法 5.  变量 语法 数据类型 变量名 =值