private async Task TestMultiple(int c, bool AssertIndividually, int?LogStatisticsEvery) { DateTime Start = DateTime.Now; List <FileStatistics> Stat = null; List <double> Milliseconds = null; int i; Simple[] Objects = new Simple[c]; Simple Obj2; for (i = 0; i < c; i++) { Objects[i] = CreateSimple(this.MaxStringLength); await this.file.SaveNewObject(Objects[i]); if (AssertIndividually) { Console.Out.WriteLine(); Console.Out.WriteLine((i + 1).ToString() + " objects:"); Console.Out.WriteLine(new string('-', 80)); await AssertConsistent(this.file, this.provider, i + 1, Objects[i], true); } if (LogStatisticsEvery.HasValue && (i + 1) % LogStatisticsEvery.Value == 0) { if (Stat == null) { Milliseconds = new List <double>(); Stat = new List <FileStatistics>(); } Milliseconds.Add((DateTime.Now - Start).TotalMilliseconds / LogStatisticsEvery.Value); Stat.Add(await this.file.ComputeStatistics()); Start = DateTime.Now; } } for (i = 0; i < c; i++) { Obj2 = await this.file.LoadObject <Simple>(Objects[i].ObjectId); DBFilesObjectSerializationTests.AssertEqual(Objects[i], Obj2); } if (!AssertIndividually) { await AssertConsistent(this.file, this.provider, c, null, true); } if (Stat != null) { Variables v = new Variables() { { "Stat", Stat.ToArray() }, { "ms", Milliseconds.ToArray() }, { "StepSize", LogStatisticsEvery.Value } }; Expression Exp = new Expression("[ms,Stat.BlockSize,Stat.NrBlocks,Stat.NrBytesUsed,Stat.NrBytesUnused,Stat.NrBytesTotal," + "Stat.Usage,Stat.NrObjects,Stat.MinObjectSize,Stat.MaxObjectSize,Stat.AverageObjectSize,Stat.MinDepth,Stat.MaxDepth," + "Stat.NrBlockLoads,Stat.NrCacheLoads,Stat.NrBlockSaves,Stat.MinObjectsPerBlock,Stat.MaxObjectsPerBlock," + "Stat.AverageObjectsPerBlock,Stat.MinBytesUsedPerBlock,Stat.MaxBytesUsedPerBlock,Stat.AverageBytesUsedPerBlock]T"); Console.Out.WriteLine("ms, BlockSize, NrBlocks, NrBytesUsed, NrBytesUnused, NrBytesTotal, " + "Usage, NrObjects, MinObjectSize, MaxObjectSize, AverageObjectSize, MinDepth, MaxDepth, " + "NrBlockLoads, NrCacheLoads, NrBlockSaves,Min(Obj/Block),Max(Obj/Block),Avg(Obj/Block)," + "Min(UsedBytes/Block),Max(UsedBytes/Block),Avg(UsedBytes/Block)"); Console.Out.WriteLine(new string('-', 80)); Console.Out.WriteLine(Exp.Evaluate(v).ToString()); } }
private async Task TestMultiple(int NrObjects, int ArraySize, int BulkSize, bool AssertIndividually, int?LogStatisticsEvery) { DateTime Start = DateTime.Now; List <FileStatistics> Stat = null; List <double> Milliseconds = null; int i = 0, j; Simple[] Objects = new Simple[NrObjects]; Simple[] Block = new Simple[ArraySize]; Simple Obj2; ObjectSerializer Serializer = this.provider.GetObjectSerializerEx(typeof(Simple)); if (BulkSize > 1) { await this.provider.StartBulk(); } while (i < NrObjects) { for (j = 0; j < ArraySize; j++) { Block[j] = CreateSimple(this.MaxStringLength); Objects[i++] = Block[j]; } if (ArraySize > 1) { await this.file.SaveNewObjects(Block, Serializer); } else { await this.file.SaveNewObject(Block[0]); } if (BulkSize > 1 && i % BulkSize == 0) { await this.provider.EndBulk(); await this.provider.StartBulk(); } if (AssertIndividually) { Console.Out.WriteLine(); Console.Out.WriteLine(i.ToString() + " objects:"); Console.Out.WriteLine(new string('-', 80)); await AssertConsistent(this.file, this.provider, i, Objects[i - 1], true); } if (LogStatisticsEvery.HasValue && i % LogStatisticsEvery.Value == 0) { if (Stat is null) { Milliseconds = new List <double>(); Stat = new List <FileStatistics>(); } Milliseconds.Add((DateTime.Now - Start).TotalMilliseconds / LogStatisticsEvery.Value); Stat.Add((await this.file.ComputeStatistics()).Key); Start = DateTime.Now; } } if (BulkSize > 1) { await this.provider.EndBulk(); } for (i = 0; i < NrObjects; i++) { Obj2 = await this.file.LoadObject <Simple>(Objects[i].ObjectId); DBFilesObjectSerializationTests.AssertEqual(Objects[i], Obj2); } if (!AssertIndividually) { await AssertConsistent(this.file, this.provider, NrObjects, null, true); } if (Stat != null) { Variables v = new Variables() { { "Stat", Stat.ToArray() }, { "ms", Milliseconds.ToArray() }, { "StepSize", LogStatisticsEvery.Value } }; Expression Exp = new Expression("[ms,Stat.BlockSize,Stat.NrBlocks,Stat.NrBytesUsed,Stat.NrBytesUnused,Stat.NrBytesTotal," + "Stat.Usage,Stat.NrObjects,Stat.MinObjectSize,Stat.MaxObjectSize,Stat.AverageObjectSize,Stat.MinDepth,Stat.MaxDepth," + "Stat.NrBlockLoads,Stat.NrCacheLoads,Stat.NrBlockSaves,Stat.MinObjectsPerBlock,Stat.MaxObjectsPerBlock," + "Stat.AverageObjectsPerBlock,Stat.MinBytesUsedPerBlock,Stat.MaxBytesUsedPerBlock,Stat.AverageBytesUsedPerBlock]T"); Console.Out.WriteLine("ms, BlockSize, NrBlocks, NrBytesUsed, NrBytesUnused, NrBytesTotal, " + "Usage, NrObjects, MinObjectSize, MaxObjectSize, AverageObjectSize, MinDepth, MaxDepth, " + "NrBlockLoads, NrCacheLoads, NrBlockSaves,Min(Obj/Block),Max(Obj/Block),Avg(Obj/Block)," + "Min(UsedBytes/Block),Max(UsedBytes/Block),Avg(UsedBytes/Block)"); Console.Out.WriteLine(new string('-', 80)); Console.Out.WriteLine(Exp.Evaluate(v).ToString()); } }