A csv parser written while eating a burrito. Meant to be lean as possible. A project to try out the new System.IO.Pipelines and Memory/Span features for dotnet
Just run dotnet build
in the root directory.
All benchmarks are made with Benchmark.NET run with dotnet run -c release --filter * --project .\Benchmarks\Benchmarks.csproj
BenchmarkDotNet=v0.11.0, OS=Windows 10.0.17134.228 (1803/April2018Update/Redstone4)
Intel Core i7-8650U CPU 1.90GHz (Max: 1.91GHz) (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=2.1.302
[Host] : .NET Core 2.0.9 (CoreCLR 4.6.26614.01, CoreFX 4.6.26614.01), 64bit RyuJIT
DefaultJob : .NET Core 2.0.9 (CoreCLR 4.6.26614.01, CoreFX 4.6.26614.01), 64bit RyuJIT
Method | pair | method | Mean | Error | StdDev | Min | Max | Median | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Parse | (BytePipeline, KB16) | ? | 725.11 us | 0.7205 us | 0.6739 us | 724.04 us | 726.03 us | 725.16 us | 99.6094 | - | - | 420792 B |
Parse | (BytePipeline, KB2) | ? | 50.05 us | 0.1250 us | 0.1108 us | 49.85 us | 50.19 us | 50.08 us | 6.9580 | - | - | 29440 B |
Parse | (BytePipeline, KB32) | ? | 1,513.73 us | 3.5119 us | 3.1132 us | 1,509.85 us | 1,521.67 us | 1,513.18 us | 208.9844 | - | - | 878944 B |
Parse | (BytePipeline, KB4) | ? | 149.30 us | 0.3670 us | 0.3433 us | 148.79 us | 150.04 us | 149.40 us | 20.5078 | - | - | 86680 B |
Parse | (BytePipeline, KB8) | ? | 362.66 us | 0.5711 us | 0.5342 us | 361.66 us | 363.30 us | 362.79 us | 50.2930 | - | - | 210992 B |
Parse | (BytePipeline, MB4) | ? | NA | NA | NA | NA | NA | NA | N/A | N/A | N/A | N/A |
Parse | (CsvHelper, KB16) | ? | 364.16 us | 7.2279 us | 7.7337 us | 356.11 us | 376.04 us | 360.20 us | 66.4063 | - | - | 278791 B |
Parse | (CsvHelper, KB2) | ? | 33.95 us | 0.1133 us | 0.1059 us | 33.77 us | 34.13 us | 33.94 us | 9.0332 | - | - | 37932 B |
Parse | (CsvHelper, KB32) | ? | 745.46 us | 16.8149 us | 18.6897 us | 732.27 us | 803.67 us | 736.51 us | 132.8125 | - | - | 559869 B |
Parse | (CsvHelper, KB4) | ? | 83.92 us | 1.4534 us | 1.9894 us | 81.21 us | 88.95 us | 83.56 us | 17.3340 | - | - | 73057 B |
Parse | (CsvHelper, KB8) | ? | 185.44 us | 1.1783 us | 0.9839 us | 184.25 us | 187.38 us | 185.00 us | 35.1563 | - | - | 148534 B |
Parse | (CsvHelper, MB4) | ? | 133,803.13 us | 1,640.0709 us | 1,534.1232 us | 131,244.05 us | 136,105.33 us | 133,370.65 us | 23500.0000 | - | - | 99561318 B |
Parse | (MemoryPool, KB16) | ? | 862.24 us | 28.7855 us | 83.5118 us | 673.20 us | 1,050.72 us | 852.64 us | 95.7031 | - | - | 7696 B |
Parse | (MemoryPool, KB2) | ? | 63.71 us | 2.1541 us | 6.2494 us | 49.74 us | 78.51 us | 63.73 us | 7.2021 | - | - | 1792 B |
Parse | (MemoryPool, KB32) | ? | 1,919.48 us | 73.1862 us | 215.7913 us | 1,449.06 us | 2,489.53 us | 1,902.48 us | 203.1250 | - | - | 14679 B |
Parse | (MemoryPool, KB4) | ? | 210.81 us | 8.8338 us | 25.7685 us | 159.13 us | 269.33 us | 211.32 us | 20.0195 | - | - | 2656 B |
Parse | (MemoryPool, KB8) | ? | 508.63 us | 15.9451 us | 47.0145 us | 424.95 us | 626.13 us | 511.38 us | 47.8516 | - | - | 4528 B |
Parse | (MemoryPool, MB4) | ? | 254,772.58 us | 8,758.9850 us | 25,411.4038 us | 187,095.40 us | 317,383.80 us | 256,635.77 us | 40000.0000 | - | - | 2639088 B |
Parse | (SMP, KB16) | ? | 454.15 us | 9.0468 us | 20.0472 us | 421.09 us | 504.33 us | 452.61 us | 15.1367 | - | - | 7694 B |
Parse | (SMP, KB2) | ? | 40.75 us | 0.7790 us | 1.7098 us | 37.61 us | 44.17 us | 40.48 us | 1.8921 | - | - | 1792 B |
Parse | (SMP, KB32) | ? | 965.44 us | 21.6478 us | 43.7296 us | 895.24 us | 1,081.83 us | 952.43 us | 27.3438 | - | - | 14608 B |
Parse | (SMP, KB4) | ? | 107.70 us | 2.9513 us | 8.6092 us | 91.10 us | 131.43 us | 108.60 us | 4.1504 | - | - | 2656 B |
Parse | (SMP, KB8) | ? | 235.57 us | 4.7789 us | 10.7867 us | 214.27 us | 261.38 us | 234.00 us | 7.3242 | - | - | 4525 B |
Parse | (SMP, MB4) | ? | 127,794.82 us | 4,312.1072 us | 12,646.6639 us | 107,042.88 us | 156,593.48 us | 127,782.88 us | 2600.0000 | 1000.0000 | 1000.0000 | 2639085 B |
Find_Last_4MB | ? | BytePipeline | NA | NA | NA | NA | NA | NA | N/A | N/A | N/A | N/A |
Find_Last_4MB | ? | CsvHelper | 139,917.19 us | 2,790.6828 us | 2,985.9990 us | 136,872.48 us | 146,297.15 us | 138,747.95 us | 23500.0000 | - | - | 99561358 B |
Find_Last_4MB | ? | MemoryPool | 223,431.73 us | 9,200.4160 us | 26,983.2276 us | 177,871.30 us | 298,649.40 us | 218,438.80 us | 82666.6667 | - | - | 130621720 B |
Find_Last_4MB | ? | SMP | 182,704.41 us | 3,880.6883 us | 6,796.7126 us | 172,119.50 us | 202,838.27 us | 180,633.63 us | 15000.0000 | 2666.6667 | 1333.3333 | 57659232 B |
Benchmarks with issues: CsvBenchmarks.Parse: DefaultJob [pair=(BytePipeline, MB4)] CsvBenchmarks.Find_Last_4MB: DefaultJob [method=BytePipeline]