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