w3wp.exe keeps reading my .compiled files

446 Views Asked by At

We are running an asp.net website on IIS6. We just moved from .Net3.5 to .Net 4.0. In our build process we use aspnet_compiler te precompile and also aspnet_merge to merge the assemblies.

After we converted to .Net 4.0 we did a performance test. This showed that the 4.0 version was much slower than the 3.5 version.

We noticed that for every paged server the w3wp.exe proces reads the .compiled file (ie resultlistpage.aspx.cf9ca39a.compiled) from the /bin directory of the website. Not only it reads the .compiled file from the bin directory, but also for each control on the page it reads the corresponding .compiled file (like resultlist.ascx.639c3968.compiled). This happens for every page request.

I used Sysinternals Process Monitor to see this.

These aspx and ascx files are actually MVC2 views.

I tried to turn off the 'Verify that file exists' option for .aspx en .ascx in IIS6, but this didn't help. Also I turned on the 'Cache ISAPI extensions' checkbox of my application, but to no avail.

Our 3.5 version does not show this behaviour. It just loads the .compiled files once and then caches it.

Getting desperate, how can I tell IIS6 not to read the .compiled files for every request?

We will be moving to IIS7, but not very soon.

1

There are 1 best solutions below

0
On

Huh...I always assumed IIS had to check the .compiled file, since that contains the hash of the source; otherwise, how could it determine if you've changed the file in the mean time? At any rate, if this behavior has legitimately changed between 3.5 and 4.0, you might check:

Are you specifying "updateable" during your precompilation stage? If so, it's possible that could be the problem.

Another thing you might try is specifying "fixednames", which will spit out fully named dlls, which will at least let you know exactly which files are getting continually checked.