asammdf relies heavily on dict objects. Starting with Python 3.6 the dict objects are more compact and ordered (implementation detail); asammdf uses takes advantage of those changes so for best performance it is advised to use Python >= 3.6.
The benchmarks were done using two test files (available here https://github.com/danielhrisca/asammdf/issues/14) (for mdf version 3 and 4) of around 170MB. The files contain 183 data groups and a total of 36424 channels.
asamdf 3.0.0 was compared against mdfreader 2.7.5. mdfreader seems to be the most used Python package to handle MDF files, and it also supports both version 3 and 4 of the standard.
The three benchmark cathegories are file open, file save and extracting the data for all channels inside the file(36424 calls). For each cathegory two aspect were noted: elapsed time and peak RAM usage.
You will need the following packages to be able to run the benchmark script
Extract the test files from the archive, or provide a folder that contains the files “test.mdf” and “test.mf4”. Run the module bench.py ( see –help option for available options )
Benchmark environment
Notations used in the results
Files used for benchmark:
Open file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 | 706 | 256 |
asammdf 3.0.0 low mdfv3 | 637 | 103 |
asammdf 3.0.0 minimum mdfv3 | 612 | 64 |
mdfreader 2.7.5 mdfv3 | 2201 | 414 |
mdfreader 2.7.5 compress mdfv3 | 1871 | 281 |
mdfreader 2.7.5 noDataLoading mdfv3 | 948 | 160 |
asammdf 3.0.0 full mdfv4 | 2599 | 296 |
asammdf 3.0.0 low mdfv4 | 2485 | 131 |
asammdf 3.0.0 minimum mdfv4 | 1376 | 64 |
mdfreader 2.7.5 mdfv4 | 5706 | 435 |
mdfreader 2.7.5 compress mdfv4 | 5453 | 303 |
mdfreader 2.7.5 noDataLoading mdfv4 | 3904 | 181 |
Save file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 | 468 | 258 |
asammdf 3.0.0 low mdfv3 | 363 | 110 |
asammdf 3.0.0 minimum mdfv3 | 919 | 80 |
mdfreader 2.7.5 mdfv3 | 6424 | 451 |
mdfreader 2.7.5 noDataLoading mdfv3 | 7364 | 510 |
mdfreader 2.7.5 compress mdfv3 | 6624 | 449 |
asammdf 3.0.0 full mdfv4 | 984 | 319 |
asammdf 3.0.0 low mdfv4 | 1028 | 156 |
asammdf 3.0.0 minimum mdfv4 | 2786 | 80 |
mdfreader 2.7.5 mdfv4 | 3355 | 460 |
mdfreader 2.7.5 noDataLoading mdfv4 | 5153 | 483 |
mdfreader 2.7.5 compress mdfv4 | 3773 | 457 |
Get all channels (36424 calls) | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full mdfv3 | 1196 | 269 |
asammdf 3.0.0 low mdfv3 | 5230 | 121 |
asammdf 3.0.0 minimum mdfv3 | 6871 | 85 |
mdfreader 2.7.5 mdfv3 | 77 | 414 |
mdfreader 2.7.5 noDataLoading mdfv3 | 13036 | 195 |
mdfreader 2.7.5 compress mdfv3 | 184 | 281 |
asammdf 3.0.0 full mdfv4 | 1207 | 305 |
asammdf 3.0.0 low mdfv4 | 5613 | 144 |
asammdf 3.0.0 minimum mdfv4 | 7725 | 80 |
mdfreader 2.7.5 mdfv4 | 74 | 435 |
mdfreader 2.7.5 noDataLoading mdfv4 | 14140 | 207 |
mdfreader 2.7.5 compress mdfv4 | 171 | 307 |
Convert file | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full v3 to v4 | 3712 | 565 |
asammdf 3.0.0 low v3 to v4 | 4091 | 228 |
asammdf 3.0.0 minimum v3 to v4 | 6740 | 126 |
asammdf 3.0.0 full v4 to v3 | 3787 | 571 |
asammdf 3.0.0 low v4 to v3 | 4546 | 222 |
asammdf 3.0.0 minimum v4 to v3 | 8369 | 115 |
Merge files | Time [ms] | RAM [MB] |
---|---|---|
asammdf 3.0.0 full v3 | 7297 | 975 |
asammdf 3.0.0 low v3 | 7766 | 282 |
asammdf 3.0.0 minimum v3 | 11363 | 163 |
mdfreader 2.7.5 mdfv3 | 13039 | 1301 |
mdfreader 2.7.5 compress mdfv3 | 12877 | 1298 |
mdfreader 2.7.5 noDataLoading mdfv3 | 12981 | 1421 |
asammdf 3.0.0 full v4 | 11313 | 1025 |
asammdf 3.0.0 low v4 | 12155 | 322 |
asammdf 3.0.0 minimum v4 | 18787 | 152 |
mdfreader 2.7.5 mdfv4 | 21423 | 1309 |
mdfreader 2.7.5 noDataLoading mdfv4 | 20142 | 1352 |
mdfreader 2.7.5 compress mdfv4 | 20600 | 1309 |