C#内List VS hashset性能对比
来源:互联网 发布:监控显示无网络视频 编辑:程序博客网 时间:2024/06/02 04:17
昨天在看客户端代码时看到缓存用了List,直觉告诉我应该替换成HashSet,尼玛 一个O(N),一个O(1),不用直觉都知道用哪个。
而有同事说性能不一定好,好嘛,我们来个perfonmance test.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Diagnostics;namespace listtest{ class Program { static void Main(string[] args) { int times = 10000000; for (int listSize = 1; listSize < 10; listSize++) { List<string> list = new List<string>(); HashSet<string> hashset = new HashSet<string>(); for (int i = 0; i < listSize; i++) { list.Add("string" + i.ToString()); hashset.Add("string" + i.ToString()); } Stopwatch timer = new Stopwatch(); timer.Start(); for (int i = 0; i < times; i++) { list.Remove("string0"); list.Add("string0"); } timer.Stop(); Console.WriteLine(listSize.ToString() + " item LIST strs time: " + timer.ElapsedMilliseconds.ToString() + "ms"); timer = new Stopwatch(); timer.Start(); for (int i = 0; i < times; i++) { hashset.Remove("string0"); hashset.Add("string0"); } timer.Stop(); Console.WriteLine(listSize.ToString() + " item HASHSET strs time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Console.WriteLine(); } for (int listSize = 1; listSize < 50; listSize += 3) { List<object> list = new List<object>(); HashSet<object> hashset = new HashSet<object>(); for (int i = 0; i < listSize; i++) { list.Add(new object()); hashset.Add(new object()); } object objToAddRem = list[0]; Stopwatch timer = new Stopwatch(); timer.Start(); for (int i = 0; i < times; i++) { list.Remove(objToAddRem); list.Add(objToAddRem); } timer.Stop(); Console.WriteLine(listSize.ToString() + " item LIST objs time: " + timer.ElapsedMilliseconds.ToString() + "ms"); timer = new Stopwatch(); timer.Start(); for (int i = 0; i < times; i++) { hashset.Remove(objToAddRem); hashset.Add(objToAddRem); } timer.Stop(); Console.WriteLine(listSize.ToString() + " item HASHSET objs time: " + timer.ElapsedMilliseconds.ToString() + "ms"); Console.WriteLine(); } Console.ReadLine(); } }}
可以明显看出来,hashset的优势,Talk is easy, show the code!
0 0
- C#内List VS hashset性能对比
- HashSet 、 Dictionary 、List性能对比
- C#HashSet 、 Dictionary 、List性能对比
- C# vs C++ vs Java性能对比
- Java 中 List 与 HashSet 的对比
- c# List.FindAll和for的性能对比
- Smarty vs Twig: 性能对比
- Hadoop vs Spark性能对比
- Smarty vs Twig 性能对比:
- Hadoop vs Spark性能对比
- Hadoop vs Spark性能对比
- tengine vs nginx 在线性能对比
- TokuMX vs. MongoDB 插入性能对比
- PHP 7 vs HHVM性能对比
- MessageFormat vs String plus性能对比
- Angular2 VS Angular4 深度对比:特性、性能
- 包围盒性能对比测试AABB vs OBB vs Sphere
- list 、set 、map 粗浅性能对比分析
- Android核心基础二
- Android异步加载网络数据以及数据缓存的讲解、实例
- ConcurrentLinkedQueue使用方法
- Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
- 【CSDN开源夏令营】 基于Web的SSH客户端,实现跨平台的云服务管理(二)环境搭配
- C#内List VS hashset性能对比
- 安装Linux的源代码包
- C#中获取当前时间:System.DateTime.Now.ToString()用法
- android的原理,为什么不需要手动关闭程序
- sizeof
- Cocosbuilder3.x使用
- acm-Not That Kind of Graph-uva10800
- 基于IOS的FTP详解(三)下载和断点续传
- 数字整除