public void TestPerformanceBatchSize(Tuple<int, int, int, int> testCase)
        {
            var total = (long) testCase.Item1*(testCase.Item1 + 1)/2*testCase.Item2;
            using (var journal = new Journal(TestDirectory, batchSize: testCase.Item4))
            {
                var addingElapsedByThreadId = new ConcurrentDictionary<long, List<TimeSpan>>();
                Parallel.For(1, testCase.Item1 + 1, new ParallelOptions
                {
                    MaxDegreeOfParallelism = testCase.Item3
                }, value =>
                {
                    var addingElapsed = StopWatchUtil.Measure(() =>
                    {
                        var tasks =
                            Enumerable.Range(1, testCase.Item2)
                                .Select(_ => { return journal.AddAsync(new Transaction(Operation.Deposit, value)); })
                                .ToArray();
                        Task.WaitAll(tasks);
                    });
                    addingElapsedByThreadId.AddOrUpdate(
                        Thread.CurrentThread.ManagedThreadId,
                        key => { return new List<TimeSpan> {addingElapsed}; },
                        (key, list) =>
                        {
                            list.Add(addingElapsed);
                            return list;
                        });
                });
                var computingElapsed =
                    StopWatchUtil.Measure(() => { Assert.AreEqual(total, TransactionsHelper.ComputeTotal(journal)); });

                using (
                    var fileStream =
                        new FileStream(
                            Path.Combine(TestContext.CurrentContext.TestDirectory,
                                GetType().FullName + ".txt"), FileMode.Append))
                {
                    using (var streamWriter = new StreamWriter(fileStream))
                    {
                        streamWriter.WriteLine("***" + testCase + "***");
                        streamWriter.WriteLine("timestamp=" + DateTimeOffset.UtcNow);
                        streamWriter.WriteLine("threads=" + addingElapsedByThreadId.Keys.Count);
                        streamWriter.WriteLine("addingMS=" +
                                               addingElapsedByThreadId.Values.Sum(
                                                   v => v.Sum(timeSpan => timeSpan.TotalMilliseconds)));
                        streamWriter.WriteLine("computingMS=" + computingElapsed.TotalMilliseconds);
                        journal.DumpStatistic(streamWriter.WriteLine);
                    }
                }
            }
        }