예제 #1
0
        private static bool RunJoinTest3(int leftSize, int rightSize, int loops)
        {
            TestHarness.TestLog("RunJoinTest3({0}, {1}, {2})", leftSize, rightSize, loops);

            Wrapped <int>[] left  = new Wrapped <int> [leftSize];
            Wrapped <int>[] right = new Wrapped <int> [rightSize];

            for (int i = 0; i < left.Length; i++)
            {
                left[i] = new Wrapped <int>(i);
            }
            for (int i = 0; i < right.Length; i++)
            {
                right[i] = new Wrapped <int>(i * right.Length);
            }

            Func <Wrapped <int>, int> identityKeySelector = delegate(Wrapped <int> x) { return(x.val); };

            IEnumerable <Pair> seqQuery = Enumerable.Join <Wrapped <int>, Wrapped <int>, int, Pair>(
                left, right, identityKeySelector, identityKeySelector, delegate(Wrapped <int> x, Wrapped <int> y) { return(new Pair(x.val, y.val)); });
            IEnumerable <Pair> parQuery = left.AsParallel().Join <Wrapped <int>, Wrapped <int>, int, Pair>(
                right.AsParallel(), identityKeySelector, identityKeySelector, delegate(Wrapped <int> x, Wrapped <int> y) { return(new Pair(x.val, y.val)); });

            PerfHelpers.DrivePerfComparison(
                delegate {
                foreach (Pair p in seqQuery)
                {
                    // Simulate work:
                    int z = 0;
                    for (int i = 0; i < 5; i++)
                    {
                        z *= p.x;
                        z *= p.y;
                    }
                }
            },
                delegate {
                foreach (Pair p in parQuery)
                {
                    // Simulate work:
                    int z = 0;
                    for (int i = 0; i < 5; i++)
                    {
                        z *= p.x;
                        z *= p.y;
                    }
                }
            },
                loops);

            return(true);
        }