In my last blog entry I said I would have another entry up by the end of the long weekend. Of course, that means that I will scramble to put something together late Sunday evening. Unfortunately I was waylaid (once again) by Tivo and the fact that it recorded several more episodes from last season's Sopranos which I was obligated to watch. We did not have HBO until recently but have rented all the DVD's from past seasons in the last year or so and once we finish the previous season we'll be completely caught up. The hard part about watching the older episodes is avoiding plot spoilers - it was impossible for us not to find out about Adriana's fate last year, although we have not yet got to that episode and are prentending we don't know about it (aside from yelling at her through the TV to stop talking to the feds!). At any rate, a slow Monday morning the week between Christmas and New Years provides a good chance to catch up on the blog.

Last time I talked about how I am a tester for the CLR team. The CLR test team is divided into teams roughly along feature sets. For instance, the test team for the Managed Services area includes COM Interop and reflection. Developer Services includes things like debuggers and profilers. For the two years I have worked here I have been on the Loader Type System (LTS) test team. We are one of the larger test teams and own a wide array of features including metadata and metadata API set, the CLR shim (mscoree) and all API's exported from it, the managed Assembly and AppDomain classes, and all the plumbing inside the runtime which deals with the loading of assemblies and layout of types. We also own the NGEN tool, which is what I specifically work on.

For the uninitiated, NGEN is a tool which runs the JIT over an assembly and creates native code for the entire assembly and then saves all that native code in a PE file which gets stuffed away in a private cache. The CLR will then automatically load and use this pre-compiled code rather than invoking the JIT at run time. The core reason for doing all this is to improve performance. This point may seem obvious but in my experience the reasons why this improves performance are not obvious to many people. Here are some links to some good (accurate!) information on NGEN. I've found various things in Google (oops... I meant MSN) searches which are, well, less than accurate. Maybe I'll make another blog out of pointing some of those out.

Good explanation of NGEN priniciple from the guy who runs the CLR product team; but a little out of date: http://blogs.msdn.com/jasonz/archive/2003/09/24/53574.aspx

NGEN Performance: go to http://msdn.microsoft.com/perf and select Chapter 5. Select the "NGEN" topic therein.

More NGEN Performance: http://blogs.msdn.com/ricom/archive/2004/10/18/244242.aspx