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.