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"; }