Beispiel #1
0
        public static void YahooBenchmarkTest(IPerfTestState state)
        {
            var rowCount   = 0UL;
            var batchCount = 0UL;

            var eventArray   = new StreamEvent <Event> [ArraySize];
            var segment      = new ArraySegment <StreamEvent <Event> >(eventArray);
            var events       = new Subject <ArraySegment <StreamEvent <Event> > >();
            var inputStream  = events.ToStreamable();
            var outputStream = BenchmarkQuery(inputStream);

            outputStream.ToStreamEventObservable().ForEachAsync(o => rowCount++);

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            for (int i = 0; i < 1000; i++)
            {
                PopulateArray(eventArray);
                eventArray[ArraySize - 1] = StreamEvent.CreatePunctuation <Event>(DateTime.Now.Ticks);
                events.OnNext(segment);
                batchCount++;
                if (batchCount % 100 == 0)
                {
                    Console.WriteLine(new { rowCount, batchCount, time = stopwatch.ElapsedMilliseconds });
                }
            }
        }
        public static void EquiJoinStreamableTest(IPerfTestState state)
        {
            const int LeftSize     = 1000000;
            const int GroupingSize = 10;
            const int RightSize    = LeftSize * GroupingSize;
            const int NumTests     = 20;
            var       pool         = new MemoryPool <Empty, int>();

            state.Action = "creating input data...";
            var input1 = CreateSequentialStreamable(LeftSize, pool);
            var input2 = CreateSequentialStreamable(RightSize, pool);

            for (int j = 1; j <= NumTests; j++)
            {
                state.Action = string.Format("running {0}/{1}...", j, NumTests);

                var timer = new Stopwatch();
                timer.Start();
                var output      = input1.Join(input2, l => l, r => r / GroupingSize, (l, r) => l);
                int outputCount = 0;
                output.ToStreamMessageObservable().ForEachAsync(b => outputCount += b.Count).Wait();
                timer.Stop();

                state.AddResult(LeftSize + RightSize, outputCount, timer.Elapsed);
            }

            state.Action = "DONE";
        }
        public static void EquiJoinStreamableTest(IPerfTestState state)
        {
            const int LeftSize     = 1_000_000;
            const int GroupingSize = 10;
            const int RightSize    = LeftSize * GroupingSize;
            const int NumTests     = 20;
            var       pool         = new MemoryPool <Empty, int>();

            state.Action = "creating input data...";
            var leftInputData  = CreateInputData(LeftSize, pool);
            var rightInputData = CreateInputData(RightSize, pool);

            for (int j = 1; j <= NumTests; j++)
            {
                state.Action = string.Format("running {0}/{1}...", j, NumTests);

                // Clone input sources to new streamables for this iteration's query
                var leftInputStreamable  = CloneInputToStreamable(leftInputData);
                var rightInputStreamable = CloneInputToStreamable(rightInputData);

                // Setup query
                var output      = leftInputStreamable.Join(rightInputStreamable, l => l, r => r / GroupingSize, (l, r) => l);
                int outputCount = 0;

                // Process Data
                var timer = new Stopwatch();
                timer.Start();
                output.ToStreamMessageObservable().ForEachAsync(b => outputCount += b.Count).Wait();
                timer.Stop();

                state.AddResult(LeftSize + RightSize, outputCount, timer.Elapsed);
            }

            state.Action = "DONE";
        }