private static async Task GetEnumerableStreamBenchmarkAsync(TimeSpan timeout) { using (var db = new SqlLocalDB()) { var es = new SqlEventStore(db.ConnectionString); await es.Database.InitializeAsync(); await es.WithBulkCopyAppend().AppendAsync(GetUncommittedSource(1000, 100000)); var streamIdSet = es.GetEnumerable().Select(x => x.StreamId).Distinct().ToList(); // var fs = new[] { "default", "unknown", }; var xs = new[] { new List <double>(), new List <double>(), }; for (int k = 0; k < 10; k++) { var i = 0; foreach (var f in new Func <ISqlEventStore, ISqlEventStore>[] { x => x, }) { var y = f(es); var sw = new Stopwatch(); var rnd = Randomness.Create(); int n = 0; while (sw.Elapsed < timeout) { var streamId = streamIdSet[rnd.Next(streamIdSet.Count)]; var minSeq = 1; var maxSeq = minSeq + rnd.Next(100); sw.Start(); n += y.GetEnumerableStream(streamId, minSeq, maxSeq).Count(); sw.Stop(); } var p = n / sw.Elapsed.TotalSeconds; xs[i].Add(p); i++; } Console.Write($"{k}"); for (int j = 0; j < 2; j++) { var p = xs[j][k]; var fit = Tuple.Create(0d, 0d); if (xs[j].Count > 1) { fit = Fit.Line(Enumerable.Range(1, xs[j].Count).Select(x => (double)x).ToArray(), xs[j].ToArray()); } Console.Write($" | {fs[j]}: {p,9:N1} op/s {fit.Item1,9:N1}+x*{fit.Item2,9:N1}"); } Console.WriteLine(); } } }