c# List.FindAll和for的性能对比
来源:互联网 发布:家庭装修设计软件 编辑:程序博客网 时间:2024/05/20 06:52
List.FindAll的效率竟然比for循环还差
以上是baidu出来的一篇文章,让我惊诧不已,因为在AI模块我已经使用了很多FindAll。但是,上文的结论是真的吗?我在上文代码基础上增加了多次测试的代码:
static void Main(string[] args) { Test(1); Test(1); Test(10); Test(100); Test(1000); } static void Test(int count) { Console.WriteLine("【 count = {0} 】", count); Random rand = new Random(); List<int> list = new List<int>(); for (int i = 0; i < 100; i++) { list.Add(rand.Next(10)); } Stopwatch watch = new Stopwatch(); //用findall long time = 0; for (int j = 0; j < count; j++) { list.Clear(); for (int i = 0; i < 100; i++) { list.Add(rand.Next(10)); } watch.Reset(); watch.Start(); List<int> resultfindall = null; resultfindall = list.FindAll((i) => { return i == 5; }); watch.Stop(); time += watch.Elapsed.Ticks; } Console.WriteLine("findall:" + time); //用for循环 List<int> resultfor = null; time = 0; for (int j = 0; j < count; j++) { list.Clear(); for (int i = 0; i < 100; i++) { list.Add(rand.Next(10)); } watch.Reset(); watch.Start(); resultfor = new List<int>(100); for (int i = 0; i < list.Count; i++) { if (list[i] == 5) { resultfor.Add(list[i]); } } watch.Stop(); time += watch.Elapsed.Ticks; } Console.WriteLine("for:" + time); } }
得到了如下结果:
.Net2.0, visual studio 执行1,1,10, 100,1000次:
.Net4.1, visual studio 执行1,1,10, 100,1000次:
Unity 先预处理再执行1000次:
Unity 先预处理再执行 10 次
Unity 先预处理再执行 1 次
我的测试程序表明:无论windows平台还是unity平台,List.FindAll的效率并非如前文所说“比for循环差五六十倍”。事实是,因为要初始化算法现场,进程第一次调用List.FindAll的耗时比for循环长五六十倍。但是,第一次之后的调用List.FindAll和for循环的性能差异是非常小的,可以忽略。
阅读全文
0 0
- c# List.FindAll和for的性能对比
- iterator和for语句解析list的性能对比
- 对比C#中for和foreach循环的性能
- 对比C#中for和foreach循环的性能
- List.RemoveAll和List.FindAll结合产生的性能问题之后...
- 泛型List和数组Array的FindAll方法
- C#内List VS hashset性能对比
- C#和java的异常处理性能对比
- C# Find() 与 FindAll()方法的使用
- c# 下的List和Dictionary性能比较
- C#中For循环和List.Find效率的比较
- C#中for和foreach循环的性能
- for each和for循环的对比
- Python的BeautifulSoup的find()和findAll()
- 正则表达式match和findall的区别
- python re的findall和finditer
- Python爬虫:BeautifulSoup的find()和findAll()
- List的Sort()、Find()、FindAll()、Exist()的使用方法举例
- 技术人员的危机感
- Android VideoView播放视频竖屏切换横屏有黑白边无法全屏
- vs中debug版本何release的区别
- csdn如何转载
- 十进制转二进制含代码
- c# List.FindAll和for的性能对比
- shell中后台运行函数
- “小学生遇到苏轼”: 大数据教育将迎来普及
- 初识oracle的本地管理表空间和字典管理表空间
- 通过JS判断网络状态调研及实例demo说明
- NOIP 2015 愤怒的小鸟
- 齐次坐标详解与普通坐标之间的转换
- 【SMOJ】2017.10.18模拟赛27
- jvm类加载器