The Performance of III ASN.1 Library

Since our main target is embeded platform, the memory requirement has been a very important issue to us.  We have tried very hard to minimize the memory footprint of our ASN.1 library. With the release of version 2.1 of III ASN.1 Tool, we have marked a milestone in this area. Furthermore, the performance improvement is even more remarkable.  We wrote the test programs which decode a TerminalCapabilitySet message sent from NetMeeting. 

Test Environment : Windows 2000, MSVC 6.0 SP4,  Multithread DLL Release build.

ASN.1 file used : h245v7.asn

File name Executable size Note
iiitest.cpp   Default new and delete 102,400
Custom Memory Manager 131072
pwtest.cpp (using Pwlib version 1.1.33) 1,105,920 In addition, the pwlib.dll is required to run the program.

The following table compares the execution time required to decodes the same TerminalCapablitySet message 100000 times between III ASN.1 Tool and Pwlib.  Two loops are compared in that the loop 2 creates and destructs the required objects in every iteration while the object creation only takes place in the first iteration of loop 1.  Although it is highly improbable that a real application would behave like loop 1, this comparison shows how the objects creation dominants the decoding process. If you are to compare the performance of III ASN.1 Tool with that of other implementations, you should be aware  that some implementations using C language requires explicit calls for object preparation and destruction, and whether the calls are inside the loop or not is critical to the comparison.  

Test Environment : Pentium III 800 MHz, Windows 2000, MSVC 6.0 SP4, Release build

ASN.1 file used : h245v7.asn

Default new and delete Custom Memory Manager
Single-threaded Multithreaded DLL Single-threaded Multithreaded DLL
iiitest1.cpp loop 1 7580 ms 7691 ms 7551 ms 7591 ms
loop 2 34320 ms 33959 ms 20359 ms 22442 ms
pwtest1.cpp loop 1 N/A 1568804 ms N/A N/A
loop 2 N/A 1580373 ms N/A N/A

These tests show that our implementation is more than 10 times smaller, and almost 50 times faster (loop 2) when using default new and delete. Moreover, if we override operator new and delete, the speed would increase by almost 70 times.