.NET 3.5 SP1 gets improved bootstrapping by no longer checking the strong name of assemblies that come from trusted locations. A bit controversial in my book, but somewhat justified.
I checked if the 64-bit version of the CLR would not move this time-consuming step. Signed the DLL, put it in the GAC, and then encrypted the byte. There are no complaints when loading the assembly. So this is not an improvement in the SP1 launch prefix, which explains the difference.
Other factors during startup: - Loading the CLR from disk (cold start only) - Crash for dependent assemblies - JIT compiling the startup code
Coldstart may very well be a factor; you probably have no other processes on which the 64-bit version of the CLR is loaded. It is easy to fix by running a dummy .NET application during the test.
Thunder assemblies may take longer for the same reason. It is unlikely that 64-bit ngen-ed .NET collector images are in the file system cache. Again, it is easy to eliminate using a dummy application that is dependent on the same builds.
The 64-bit JITter is a tighter cracking nut. An arbitrary call is to assume that MSFT does not spend so much time for one of the artists to be a 32-bit JITter. Nothing confirmed any evidence. It is difficult to measure too, you would load the assembly with Assembly.Load, then the time Activator.CreateInstance (), where the class constructor calls as much code as possible.
Hans Passant Nov 07 '08 at 21:00 2008-11-07 21:00
source share