コード例 #1
0
ファイル: Program.cs プロジェクト: zyj0021/reactive
        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();
        }