码迷,mamicode.com
首页 > 其他好文 > 详细

字典查找、linq、foreach、yield等几种查找性能对比

时间:2016-07-03 11:46:34      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

先上代码,以1千万记录的内存查找测试:

技术分享
 List<Student> stuList = new List<Student>();
            Dictionary<int, Student> dictStu = new Dictionary<int, Student>();
            Student student = null;
            for (int i = 0; i < 10000000; i++)
            {
                student = new Student(i);
                stuList.Add(student);
                dictStu.Add(i, student);
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            student = dictStu[99999];
            sw.Stop();
            Console.WriteLine(student.ToString());
            Console.WriteLine("dict={0}", sw.ElapsedMilliseconds);


            sw.Reset();
            sw.Start();

             var yieldResult = StudentResult(stuList);
             foreach (Student stu in yieldResult)
             {
                 Console.WriteLine(stu.ToString());
             }
            // Student s = yieldResult.First<Student>();
            //Console.WriteLine(s.ToString());
            sw.Stop();

            Console.WriteLine("yieldResult={0}", sw.ElapsedMilliseconds);

            sw.Reset();
            sw.Start();

            foreach (Student stu in stuList)
            {
                if (stu.Age == 99999)
                {
                    student = stu;
                    break;
                }
            }


            sw.Stop();

            Console.WriteLine("foreach={0}", sw.ElapsedMilliseconds);



            sw.Reset();
            sw.Start();

            var result = from stu in stuList
                         where stu.Age == 99999
                         select stu;

            foreach (Student stu in result)
            {
                Console.WriteLine(stu.ToString());
            }
            sw.Stop();

            Console.WriteLine("linq={0}", sw.ElapsedMilliseconds);
View Code
技术分享
    static IEnumerable<Student> StudentResult(List<Student> stuList)
        {
            foreach (Student stu in stuList)
            {
                if (stu.Age == 99999)
                {
                    yield return stu;
                }

            }
        }
yield 查找方式的方法定义

 

执行结果

技术分享

结论:

字典查找为哈希查找,性能最优,其次是foreach遍历,后依次为yield,linq

 

//var result = from stu in stuList
// //where stu.Age > 10 && stu.Age < 20
// select stu;

var result = stuList
.Where(r => r.Age > 10 && r.Age < 20)
.Select(r => r);

字典查找、linq、foreach、yield等几种查找性能对比

标签:

原文地址:http://www.cnblogs.com/weiweictgu/p/5637017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!