public static void ReadAll_DataStreams(FixedRecordReaderBenchmarkArguments args) { using (var reader = new FixedWidthReader(new StreamReader(args.Path, args.Encoding, true, args.BufferSize))) { reader.Settings.CaptureRawRecord = false; for (int i = 0; i < ColumnCount; i++) reader.Columns.Add(ColumnWidth); string s; if (args.FieldIndex < 0) { while (reader.ReadRecord()) { for (int i = 0; i < reader.Columns.Count - 1; i++) s = reader[i]; } } else { while (reader.ReadRecord()) { for (int i = 0; i < args.FieldIndex + 1; i++) s = reader[i]; } } } }
public static void ReadAll_DataStreams(FixedRecordReaderBenchmarkArguments args) { using (var reader = new FixedWidthReader(new StreamReader(args.Path, args.Encoding, true, args.BufferSize))) { reader.Settings.CaptureRawRecord = false; for (int i = 0; i < ColumnCount; i++) { reader.Columns.Add(ColumnWidth); } string s; if (args.FieldIndex < 0) { while (reader.ReadRecord()) { for (int i = 0; i < reader.Columns.Count - 1; i++) { s = reader[i]; } } } else { while (reader.ReadRecord()) { for (int i = 0; i < args.FieldIndex + 1; i++) { s = reader[i]; } } } } }
public static void ReadAll(FixedRecordReaderBenchmarkArguments args) { using (var reader = new FixedWidthRecordReader(new StreamReader(args.Path, args.Encoding, true, args.BufferSize), args.BufferSize)) { reader.SkipEmptyLines = args.SkipEmptyLines; for (int i = 0; i < ColumnCount; i++) reader.Columns.Add(new FixedWidthRecordColumn(reader.GetDefaultColumnName(i), typeof(string), string.Empty, i * ColumnWidth, ColumnWidth)); string s; if (args.FieldIndex < 0) { while (reader.Read() != ReadResult.EndOfFile) { for (int i = 0; i < reader.Columns.Count - 1; i++) s = reader[i]; } } else { while (reader.Read() != ReadResult.EndOfFile) { for (int i = 0; i < args.FieldIndex + 1; i++) s = reader[i]; } } } }
public static void ReadAll(FixedRecordReaderBenchmarkArguments args) { using (var reader = new FixedWidthRecordReader(new StreamReader(args.Path, args.Encoding, true, args.BufferSize), args.BufferSize)) { reader.SkipEmptyLines = args.SkipEmptyLines; for (int i = 0; i < ColumnCount; i++) { reader.Columns.Add(new FixedWidthRecordColumn(reader.GetDefaultColumnName(i), typeof(string), string.Empty, i * ColumnWidth, ColumnWidth)); } string s; if (args.FieldIndex < 0) { while (reader.Read() != ReadResult.EndOfFile) { for (int i = 0; i < reader.Columns.Count - 1; i++) { s = reader[i]; } } } else { while (reader.Read() != ReadResult.EndOfFile) { for (int i = 0; i < args.FieldIndex + 1; i++) { s = reader[i]; } } } } }
//TODO: for now, the main program code is very tied to IO benchmarks. Needs to refactor to make it more modular. static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); var benchmarkOptions = new BenchmarkOptions { ActionIterationCount = 1, BenchmarkIterationCount = 3, ConcurrencyLevel = 1 }; var tests = BenchmarkTests.All; bool profiling = false; var converter = new StringValueConverter(); if (args.Length > 0) { tests = (BenchmarkTests) converter.ConvertTo(args[0], TrimmingOptions.Both, typeof(BenchmarkTests), BenchmarkTests.All); if (args.Length > 1) benchmarkOptions.BenchmarkIterationCount = converter.ConvertToInt64(args[1], TrimmingOptions.Both, benchmarkOptions.BenchmarkIterationCount, null); if (args.Length > 2) profiling = converter.ConvertToBoolean(args[2], TrimmingOptions.Both, false, null); } #region FixedWidthReader if (tests.HasFlag(BenchmarkTests.FixedWidthReader)) { var files = profiling ? new string[] { @"IO\Text\files\fixed.txt" } : new string[] { @"IO\Text\files\fixed.txt", @"IO\Text\files\test1.csv", @"IO\Text\files\test2.csv" }; foreach (var file in files) { Console.WriteLine("--- FixedWidthReader - {0} ---", file); var benchmarkArgs = new FixedRecordReaderBenchmarkArguments(); benchmarkArgs.Path = file; Benchmark.Execute("NLight", benchmarkOptions, benchmarkArgs, OutputResults, FixedRecordReaderBenchmarks.ReadAll); Benchmark.Execute("DataStreams", benchmarkOptions, benchmarkArgs, OutputResults, FixedRecordReaderBenchmarks.ReadAll_DataStreams); } } #endregion #region DelimitedReader if (tests.HasFlag(BenchmarkTests.DelimitedReader)) { var files = profiling ? new string[] { @"IO\Text\files\test1.csv" } : new string[] { @"IO\Text\files\test1.csv", @"IO\Text\files\test2.csv", @"IO\Text\files\test3.csv", @"IO\Text\files\test4.csv", @"IO\Text\files\test5.csv" }; foreach (var file in files) { Console.WriteLine("--- DelimitedReader - {0} ---", file); var benchmarkArgs = new DelimitedRecordReaderBenchmarkArguments(); benchmarkArgs.Path = file; benchmarkArgs.TrimWhiteSpaces = true; Benchmark.Execute("LumenWorks", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_LumenWorks); Benchmark.Execute("NLight", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll); Benchmark.Execute("DataStreams", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_DataStreams); Benchmark.Execute("CsvHelper", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_CsvHelper); //Benchmark.Execute("OleDb", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_OleDb); //Benchmark.Execute("Regex", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_Regex); } } #endregion #region DelimitedReaderAdvancedEscaping if (tests.HasFlag(BenchmarkTests.DelimitedReaderAdvancedEscaping)) { var files = profiling ? new string[] { @"IO\Text\files\test4.csv" } : new string[] { @"IO\Text\files\test3.csv", @"IO\Text\files\test4.csv" }; foreach (var file in files) { Console.WriteLine("--- DelimitedReader with advanced escaping - {0} ---", file); var benchmarkArgs = new DelimitedRecordReaderBenchmarkArguments(); benchmarkArgs.Path = file; benchmarkArgs.TrimWhiteSpaces = true; benchmarkArgs.AdvancedEscapingEnabled = true; Benchmark.Execute("NLight", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll); Benchmark.Execute("DataStreams", benchmarkOptions, benchmarkArgs, OutputResults, DelimitedRecordReaderBenchmarks.ReadAll_DataStreams); } } #endregion Console.WriteLine("\nDone"); Console.ReadLine(); }