External forces inspired me (read: I was paid) to make another release candidate.
Reflection on .NET is very slow compared with Java and because IKVM reflection was built on top of .NET reflection, it too was very slow. I rewrote the lower levels of reflection to take advantage of DynamicMethod when running .NET 2.0. This allows the slow .NET reflection to be bypassed and optimized accessor methods to be generated dynamically. I also rewrote the part of serialization that uses reflection to get and set the field values to generate custom dynamic methods for the serialization process. Serialization is now up to 20x faster.
Unfortunately I had to disable the use of DynamicMethod when running on Mono, because testing revealed that Mono 1.2.5's implementation of DynamicMethod is still too buggy.
A remaining caveat wrt reflection performance is that you need to call
setAccessible(true) to get the best performance when running on IKVM, because stack walking (which is needed to do the required access checks when you access a non-public member) is still very slow compared with Java.
- Improved serialization and reflection performance when running on .NET 2.0.
Binaries available here: ikvmbin-0.36.0.3.zip.
Sources (+ binaries): ikvm-0.36.0.3.zip
External sources (haven't changed since rc1): classpath-0.95-stripped.zip, openjdk-b13-stripped.zip