桑心啊,List .FindAll()的效率竟然比for循環還差。


自從認識了FindAll(),一般List中查找符合條件的數據項我都用List<T>.Find()或List<T>.FindAll().

代碼簡潔,自己看了賞心悅目,況且是微軟內部的方法,效率應該不會差。

然而,今天心血來潮,寫代碼測試了一下,確發現FindAll()比For循環效率差了好多,集合比較小的時候這差異就更明顯了。

測試代碼:

Stopwatch watch = new Stopwatch();
			Random rand = new Random();
			List<int> list = new List<int>();
			//構造一個LIST
			for (int i = 0; i < 100; i++)
			{
				list.Add(rand.Next(10));
			}
			//用FindAll
			watch.Start();
			List<int> resultFindAll = list.FindAll(delegate(int i) { return i == 5; });
			watch.Stop();
			Console.WriteLine("FindAll:" + watch.Elapsed.Ticks);
			Console.WriteLine("resultFindAll:" + resultFindAll.Count);
			//用For循環
			List<int> resultFor = new List<int>();
			watch.Reset();
			watch.Start();
			for (int i = 0; i < list.Count; i++)
			{
				if (list[i] == 5)
				{
					resultFor.Add(list[i]);
				}
			}
			watch.Stop();
			Console.WriteLine("For:"+watch.Elapsed.Ticks);
			Console.WriteLine("resultFor:" + resultFor.Count);

  List長度為100時的測試結果,即上面的代碼:

哎,集合小的時候差距最為明顯,想不到差了五六十倍。

看來以后List<T>.FindAll()還是少用為好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM