static void Sync(int n) { Console.WriteLine("IEnumerable<T> and IFastEnumerable<T>"); Console.WriteLine(); var sw = new Stopwatch(); var N = 10_000_000; var next = new Action <int>(_ => { }); var slowRange = Enumerable.Range(0, N); var fastRange = FastEnumerable.Range(0, N); var brdgRange = slowRange.ToFastEnumerable(); var slow = slowRange.Where(x => x % 2 == 0).Select(x => x + 1); var fast = fastRange.Where(x => x % 2 == 0).Select(x => x + 1); var brdg = brdgRange.Where(x => x % 2 == 0).Select(x => x + 1).ToEnumerable(); Console.WriteLine("slow.Sum() = " + slow.Aggregate(0, (sum, x) => sum + x)); Console.WriteLine("fast.Sum() = " + fast.Aggregate(0, (sum, x) => sum + x)); Console.WriteLine("brdg.Sum() = " + brdg.Aggregate(0, (sum, x) => sum + x)); Console.WriteLine(); for (var i = 0; i < n; i++) { sw.Restart(); { slow.ForEach(next); } Console.WriteLine("SLOW " + sw.Elapsed); sw.Restart(); { fast.ForEach(next); } Console.WriteLine("FAST " + sw.Elapsed); sw.Restart(); { brdg.ForEach(next); } Console.WriteLine("BRDG " + sw.Elapsed); Console.WriteLine(); } Console.WriteLine(); }