Recently Objective Systems ran some benchmark tests to see which of the languages ASN1C generates performs the fastest and how the other languages compare to the fastest language. For each language we ran the same three benchmark tests, all of which use PER encoding:
- J2735, using the SAE J2735 ASN.1 specifications
- Megaco, using the Media Gateway Control ASN.1 specifications
- S1AP, using the S1 Application Procotol ASN.1 specifications
This table shows how the languages compare to C:
Language Program Encode Difference from C Decode Difference from C -------- ------- ------------------------ ------------------------ Java J2735 6.94 times slower 14.26 times slower Megaco 3.17 times slower 3.14 times slower S1AP 6.44 times slower 14.19 times slower C# J2735 5.79 times slower 9.32 times slower Megaco 2.86 times slower 3.22 times slower S1AP 4.72 times slower 18.49 times slower Python J2735 6.43 times slower 5.08 times slower Megaco 111.61 times slower 100.93 times slower S1AP 119.91 times slower 130.95 times slower Go J2735 12.43 times slower 8.19 times slower Megaco 10.82 times slower 4.46 times slower S1AP 7.85 times slower 9.16 times slower
In all cases the ASN1C run-time code that was used did not do any license checking; we usually refer to these run-time distributions as unlimited run-time distributions.
Note that we didn't do a benchmark run for C++ since we figured the results would be very similar to the results for C.
Also note that for the C# testing we used a run-time DLL that was built with a new optimization technique that we haven't used previously. For current ASN1C customers who have an unlimited C# run-time distribution, we can make this optimized run-time DLL available to anyone who is interested. In ASN1C v8.0 the C# run-time in the distributions will be arranged more similarly to the C and C++ run-time, and C# run-time distributions will have both the current run-time assembly and the newer optimized run-time assembly.