static void Main(string[] args) { FluentArgsBuilder .NewWithDefaultConfigs() .WithApplicationDescription("Benchmark of sqlite3 bulk inserts with different pragmas.") .Parameter <int>("-i", "--batchSizeIncrement") .WithDescription("Growth of 'batchSizeBase' parameter in each test set run.") .WithValidation(i => i >= 1) .IsOptionalWithDefault(5_000) .Parameter <int>("-b", "--batchSizeBase") .WithDescription("Minimal number of inserts in a transaction, will be incremented by 'batchSizeIncrement' in each test set run.") .WithValidation(b => b >= 1) .IsOptionalWithDefault(5_000) .Parameter <int>("-t", "--tableCount") .WithDescription("Number of tables to use for inserts.") .WithValidation(t => t >= 1) .IsOptionalWithDefault(10) .Parameter <string>("-s", "--string") .WithDescription("Value to insert (along with sequential integer primary key).") .IsOptionalWithDefault("string") .Parameter <int>("-r", "--rowCount") .WithDescription("Total number of rows to insert in each test.") .WithValidation(r => r >= 100) .IsOptionalWithDefault(5_000_000) .Parameter <int>("-n", "--number") .WithDescription("Number of test set runs.") .WithValidation(n => n >= 1) .IsOptionalWithDefault(40) .Call(n => totalRows => value => tblCount => batchSizeBase => batchSizeIncrement => { Console.WriteLine("batchSize;default;sync-off;jm-wal;jm-off;lm-excl;sync-off&jm-off&lm-excl"); for (int i = 0; i < n; i++) { var batchSize = batchSizeBase + batchSizeIncrement * i; var commits = Math.Max(1, totalRows / batchSize); Console.WriteLine(new StringBuilder().AppendJoin(";", batchSize, RunTestSet("default", i, Array.Empty <string>(), tblCount, commits, batchSize, value), RunTestSet("sync-off", i, new[] { "synchronous = OFF" }, tblCount, commits, batchSize, value), RunTestSet("jm-wal", i, new[] { "journal_mode = WAL" }, tblCount, commits, batchSize, value), RunTestSet("jm-off", i, new[] { "journal_mode = OFF" }, tblCount, commits, batchSize, value), RunTestSet("lm-excl", i, new[] { "locking_mode = EXCLUSIVE" }, tblCount, commits, batchSize, value), RunTestSet("sync-off&jm-off&lm-excl", i, new[] { "synchronous = OFF", "journal_mode = OFF", "locking_mode = EXCLUSIVE" }, tblCount, commits, batchSize, value) )); } }) .Parse(args); }