CSV Reader Benchmarks

January 5, 2026 ยท View on GitHub

The CSV benchmarks measure processing the contents of a 65k record CSV file containing "SalesRecord" data. This data set does not include any quoted fields, and thus does not test correctness of any implementation.

Strongly-Typed Access

This first benchmark set measures accessing CSV data in a strongly-typed way. Some libraries provide optimized access to typed field values, while other only provide access to fields as strings and require the user to parse as appropriate. Strongly typed access can avoid allocating an intermediary string and potentially parse the value out of an internal buffer.

MethodMeanErrorMedianRatioAllocatedAlloc Ratio
RecordParserManualX412.61 ms0.178 ms12.62 ms0.6323.05 MB1.01
SylvanManual19.89 ms0.353 ms19.87 ms1.0022.92 MB1.00
SylvanAuto20.20 ms0.162 ms20.19 ms1.0222.92 MB1.00
SylvanAutoAsync21.60 ms0.328 ms21.57 ms1.0922.96 MB1.00
RecordParserManualX222.87 ms0.278 ms22.87 ms1.1522.97 MB1.00
SepManual25.87 ms0.450 ms25.88 ms1.3021.39 MB0.93
FourLambdaUtf8Manual29.04 ms0.382 ms29.03 ms1.4622.89 MB1.00
FlameCsvBinder30.17 ms2.183 ms30.26 ms1.5222.88 MB1.00
SylvanDapperAuto34.91 ms0.627 ms34.86 ms1.7661.75 MB2.69
RecordParserManual38.99 ms0.348 ms38.97 ms1.9622.95 MB1.00
FourLambdaUtf16Manual45.50 ms0.640 ms45.43 ms2.2922.89 MB1.00
CsvHelperManual59.05 ms4.096 ms58.60 ms2.9761.83 MB2.70
CsvHelperAuto60.55 ms7.215 ms59.39 ms3.0461.83 MB2.70
SoftCircuitsAuto63.01 ms0.856 ms63.00 ms3.1793.23 MB4.07
TinyCsvManual75.86 ms87.130 ms57.58 ms3.81229.77 MB10.02
CesilAuto81.93 ms8.657 ms81.62 ms4.1223.13 MB1.01

The "X2" and "X4" suffix indicate the degree of paralleization used. The RecordParser library employs parallelization in the processing of CSV records, so while RecordParser's X4 processing is the fastest, it comes at the cost of higher CPU utilization.

Each benchmark contains an "Auto" or "Manual" suffix, indicating whether the library's automatic binder was used, or whether the binder was written manually. The SylvanDapperAuto benchmark uses the generic DbDataReader binder provided by the popular Dapper library and is meant to compare the performance of the Sylvan automatic generic binder.

String-Only Access

This benchmark set measures CSV readers processing every field in the dataset as a string, which is the most basic functionality common to all CSV parsers. Typically, string values would subsequently be parsed into a strongly-typed value, so this benchmark might not be representative of a real-world use case, since in many cases using strongly-typed access would be more convenient and also faster.

MethodMeanErrorRatioAllocatedAlloc Ratio
Sep7.728 ms0.1135 ms0.9434.21 MB0.96
RecordParserX48.013 ms0.5079 ms0.9833.3 MB0.93
Sylvan8.178 ms0.1546 ms1.0035.72 MB1.00
FourLambdaUtf169.208 ms0.1736 ms1.1335.71 MB1.00
NaiveBroken10.456 ms0.2017 ms1.2861.24 MB1.71
FourLambdaUtf811.998 ms0.1515 ms1.4735.71 MB1.00
SoftCircuits13.121 ms0.1227 ms1.6035.72 MB1.00
Fluent15.158 ms0.2758 ms1.8561.24 MB1.71
FlameCsvText16.757 ms0.2441 ms2.0535.71 MB1.00
CtlData16.828 ms0.3297 ms2.0681.84 MB2.29
MgholamFastCSV17.247 ms0.2633 ms2.1137.41 MB1.05
CursivelyCsv17.271 ms0.1742 ms2.1135.71 MB1.00
FastCsvParser17.976 ms0.3327 ms2.2036.05 MB1.01
NReco19.059 ms0.3797 ms2.3335.86 MB1.00
FlameCsvStream20.879 ms0.2326 ms2.5535.71 MB1.00
RecordParser21.445 ms0.3054 ms2.6233.21 MB0.93
NLightCsv24.907 ms0.1853 ms3.0535.84 MB1.00
CsvBySteve25.356 ms0.5995 ms3.10107.24 MB3.00
CsvHelper28.058 ms0.2849 ms3.4335.85 MB1.00
Lumenworks29.341 ms0.3856 ms3.59166.79 MB4.67
NotVBTextFieldParser31.374 ms0.4125 ms3.84133 MB3.72
FSharpData34.669 ms0.6386 ms4.24230.31 MB6.45
FlatFilesCsv64.697 ms1.7705 ms7.91139.52 MB3.91
VisualBasic191.554 ms2.8246 ms23.421153.4 MB32.29

CsvSum

This benchmark measures summing the values of a single column (Total Profit) from the CSV file. It is meant to highlight an optimization employed by some libraries where you only "pay" for the columns that you access.

MethodMeanErrorRatioAllocatedAlloc Ratio
SepCsv4.273 ms0.0610 ms0.925.84 KB0.64
FourLambdaUtf84.392 ms0.0798 ms0.955.51 KB0.61
SylvanData4.640 ms0.0454 ms1.009.06 KB1.00
RecordParserX45.290 ms0.0812 ms1.14459.31 KB50.72
FlameCsvSumByIndex6.434 ms0.0903 ms1.394.33 KB0.48
FourLambdaUtf166.769 ms0.1350 ms1.468.71 KB0.96
FlameCsvSumByName7.761 ms0.1012 ms1.674.34 KB0.48
NReco13.881 ms0.1126 ms2.992677.22 KB295.61
RecordParser14.136 ms0.2378 ms3.0514.05 KB1.55
CsvHelper19.167 ms0.2933 ms4.132671.38 KB294.96
Lumenworks24.407 ms0.4384 ms5.26136754.47 KB15,099.91