From 5cf4ccbb0234e795fa6d529227ee6cfb39e243c2 Mon Sep 17 00:00:00 2001 From: ntr Date: Tue, 2 Jan 2024 15:54:44 +0100 Subject: [PATCH 1/2] add Sep_MT --- .../Benchmarks/PackageAssetsSuite.cs | 6 ++++ .../CsvReadable/Implementations/Sep_MT.cs | 29 +++++++++++++++++++ NCsvPerf/NCsvPerf.csproj | 2 +- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 NCsvPerf/CsvReadable/Implementations/Sep_MT.cs diff --git a/NCsvPerf/CsvReadable/Benchmarks/PackageAssetsSuite.cs b/NCsvPerf/CsvReadable/Benchmarks/PackageAssetsSuite.cs index d1b9691..17b3962 100644 --- a/NCsvPerf/CsvReadable/Benchmarks/PackageAssetsSuite.cs +++ b/NCsvPerf/CsvReadable/Benchmarks/PackageAssetsSuite.cs @@ -241,6 +241,12 @@ public void Sep() Execute(new Sep()); } + [Benchmark] + public void Sep_MT() + { + Execute(new Sep_MT()); + } + [Benchmark] public void ServiceStack_Text() { diff --git a/NCsvPerf/CsvReadable/Implementations/Sep_MT.cs b/NCsvPerf/CsvReadable/Implementations/Sep_MT.cs new file mode 100644 index 0000000..0f95d39 --- /dev/null +++ b/NCsvPerf/CsvReadable/Implementations/Sep_MT.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using nietras.SeparatedValues; + +namespace Knapcode.NCsvPerf.CsvReadable +{ + public class Sep_MT : ICsvReader + { + public List GetRecords(MemoryStream stream) where T : ICsvReadable, new() + { + using var reader = nietras.SeparatedValues.Sep.Reader(o => o with + { + HasHeader = false, +#if ENABLE_STRING_POOLING + CreateToString = SepToString.PoolPerColThreadSafeFixedCapacity(maximumStringLength: 128), +#endif + }) + .From(stream); + + return reader.ParallelEnumerate(row => + { + var record = new T(); + record.Read(row.UnsafeToStringDelegate); + return record; + }).ToList(); + } + } +} diff --git a/NCsvPerf/NCsvPerf.csproj b/NCsvPerf/NCsvPerf.csproj index 3489cbd..be5409b 100644 --- a/NCsvPerf/NCsvPerf.csproj +++ b/NCsvPerf/NCsvPerf.csproj @@ -40,7 +40,7 @@ - + From 9a766faf789fab376d05964101715fcbbf3b00e2 Mon Sep 17 00:00:00 2001 From: ntr Date: Tue, 2 Jan 2024 15:58:31 +0100 Subject: [PATCH 2/2] forward args to benchmark runner --- NCsvPerf/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NCsvPerf/Program.cs b/NCsvPerf/Program.cs index 62b5b36..6c2b620 100644 --- a/NCsvPerf/Program.cs +++ b/NCsvPerf/Program.cs @@ -14,7 +14,7 @@ private static void Main(string[] args) #else config = null; #endif - BenchmarkRunner.Run(config); + BenchmarkRunner.Run(config, args); } } }