Ok, nuff said about using 1.1, but I had a serious issue with the speed, and I finally solved it. For anyone else dealing with this, this may be useful to know (& it backs up some old posts I was reading from Jeff & other oldtimers):
My 3D software renderer was going well - wonderfully fast in 1.4, and then I tried it in 1.1. Eeek - It ran about 10 times slower!
So I busted out the VC debugger, and ran Explorer through it, paused the debugger and guess what I found…
The code was looking reading a either 1, 2, or 3 bytes via a byte pointer, then branching off on a DWORD pointer. For those that don’t know - this causes a ‘PPro stall’ which is very nasty. I had my suspicions, and lo & behold the bytes it was referencing was my bytecode. The JIT had decided not to bother compiling my renderer!
After trying (unsuccesfully) to change a few things, I came across a post saying ‘inlining could actually lose you performance’. Well I wasn’t inlining, but my function was quite large at 900+ bytecodes - thanks javap
So I took a small section of the loop, and put it into a little function (de-inlining, even though the code wasn’t inlined in the first place!)
Lo & behold - its running nice and fast again (200k+ textured tris a sec) - the JIT is doing its job again!
Moral of the story: Er, Im not sure, but big functions (i.e. self inlining) can definately screw up the MS 1.1 JIT.
Kudos to Sun, the 1.4 took it in its stride, so this probably doesn’t apply to most of you