[ASP.NET] Dictionary 和 Hashtable 区别
2016-03-11 16:32
531 查看
Dictionary和Hashtable 是两个比较常用的表示键/值的集合,两者在实际使用过程中有何区别呢?
具体区别如下:
1. Hashtable不支持泛型,而Dictionary支持泛型。
2. Hashtable中的元素值为Object类型,所以在存储或检索值类型时通常会发生装箱和拆箱的操作,非常耗时。
3. 单线程中推荐使用Dictionary,有泛型优势。多线程中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型,而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。
4. 在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。
View Code
结果如下:
参考:
/article/5095014.html
具体区别如下:
1. Hashtable不支持泛型,而Dictionary支持泛型。
2. Hashtable中的元素值为Object类型,所以在存储或检索值类型时通常会发生装箱和拆箱的操作,非常耗时。
3. 单线程中推荐使用Dictionary,有泛型优势。多线程中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型,而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。
4. 在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。
/// <summary> /// Key为字符型,Dictionary和Hashtable查询性能比较 /// </summary> static void StringMethod() { Console.WriteLine("Key为字符型,Dictionary和Hashtable查询性能比较:"); int count = 1000000; Dictionary<string, string> dictionary = new Dictionary<string, string>(); Hashtable hashtable = new Hashtable(); for (int i = 0; i < count; i++) { dictionary.Add(i.ToString(), "String"); hashtable.Add(i, i); } Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { string value = dictionary[i.ToString()]; } stopwatch.Stop(); Console.WriteLine("Dictionary:" + stopwatch.ElapsedMilliseconds); stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { object value = hashtable[i.ToString()]; } stopwatch.Stop(); Console.WriteLine("Hashtable:" + stopwatch.ElapsedMilliseconds); }
View Code
结果如下:
参考:
/article/5095014.html
相关文章推荐
- ASP.NET反射
- metasploit中meterpreter命令
- ASP.NET速度优化
- 针对VS中运行的ASP.NET程序没问题发布到IIS 报NotFund 错误
- ASP.NET Web API 使用Swagger生成在线帮助测试文档
- ASP.NET MVC上传文件到服务器
- asp.net笔试题
- 如何提高ASP.NET页面载入速度的方法
- .NET跨平台之旅:将示例站点从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0
- 关于ASP.NET中的三层结构
- Raspberry Pi超声波测距样例
- ASP.net(C#)导出Excel----普通表头,多层表头。
- 本地ASP.NET网站的公网发布
- ASP.NET页面的字符编码设置
- Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了)---zhangkaitao
- ASP.NET页面刷新:自动刷新页面的实现方法总结:
- 在git上下载的Asp.Net MVC 4源码怎么编译?
- Dependency Injection in ASP.NET Web API 2
- ASP.NET 5
- ASP.NET 的数据绑定,DataList,Repeater 的绑定示例