Linq.cs
namespace Study
{
public class Linq
{
public void PerformanceCheck(int listCount, int iterCount)
{
var rand = new Random();
var stopWatch = new Stopwatch();
stopWatch.Start();
for (var i = 0; i < iterCount; i++)
{
var originList = GetRandList(rand, listCount);
var foreachList = Where(originList);
}
stopWatch.Stop();
Console.WriteLine($"foreach\t {stopWatch.ElapsedTicks} ticks\t {stopWatch.ElapsedMilliseconds} ms");
stopWatch.Restart();
for (var i = 0; i < iterCount; i++)
{
var originList = GetRandList(rand, listCount);
var whereList = originList.Where((integer) => integer < 50).ToList();
}
stopWatch.Stop();
Console.WriteLine($"Where\t {stopWatch.ElapsedTicks} ticks\t {stopWatch.ElapsedMilliseconds} ms");
stopWatch.Restart();
for (var i = 0; i < iterCount; i++)
{
var originList = GetRandList(rand, listCount);
var findAllList = originList.FindAll((integer) => integer < 50);
}
stopWatch.Stop();
Console.WriteLine($"FindAll\t {stopWatch.ElapsedTicks} ticks\t {stopWatch.ElapsedMilliseconds} ms");
stopWatch.Restart();
for (var i = 0; i < iterCount; i++)
{
var originList = GetRandList(rand, listCount);
var queryList = (from integer in originList where integer < 50 select integer).ToList();
}
stopWatch.Stop();
Console.WriteLine($"Query\t {stopWatch.ElapsedTicks} ticks\t {stopWatch.ElapsedMilliseconds} ms");
Console.WriteLine("------------------------------------------");
}
private List<int> Where(List<int> list)
{
var newList = new List<int>();
foreach(var integer in list)
{
if (integer < 50)
{
newList.Add(integer);
}
}
return newList;
}
private List<int> GetRandList(Random rand, int listCount)
{
var originList = new List<int>();
for (var j = 0; j < listCount; j++)
{
originList.Add(rand.Next(100));
}
return originList;
}
}
}
Program.cs
// See https://aka.ms/new-console-template for more information
using Study;
var linq = new Linq();
linq.PerformanceCheck(1000, 1);
linq.PerformanceCheck(1000, 100);
linq.PerformanceCheck(1000000, 1);
linq.PerformanceCheck(1000000, 100);
foreach 2961 ticks 0 ms
Where 17856 ticks 1 ms
FindAll 727 ticks 0 ms
Query 823 ticks 0 ms
------------------------------------------
foreach 86169 ticks 8 ms
Where 42490 ticks 4 ms
FindAll 25321 ticks 2 ms
Query 24212 ticks 2 ms
------------------------------------------
foreach 369114 ticks 36 ms
Where 240216 ticks 24 ms
FindAll 221559 ticks 22 ms
Query 208577 ticks 20 ms
------------------------------------------
foreach 26781427 ticks 2678 ms
Where 20116095 ticks 2011 ms
FindAll 20595098 ticks 2059 ms
Query 20149819 ticks 2014 ms
------------------------------------------z