I have a large application that currently exists as a hybrid of WebForms and MVC 2.0. Startup of my application is dreadful, and the culprit is primarily because of the AreaRegistration.RegisterAllAreas
call. More specifically, that it is using the System.Web. Compilation.BuildManager.GetReferencedAssemblies
to enumerate all types in assemblies directly referenced by the application and test them to see if they derive from AreaRegistration
.
Unfortunately, I have a number of third-party assemblies that happen to be quite extensive, so this initial load can be pretty bad. I'd have much better results if I could tell it which assemblies to look for AreaRegistrations
, or even register areas manually for the time being.
I can gather up all the internals of AreaRegistration
to create and invoke the registration, but I'm just curious if others have had and worked around this issue.
I put together the following utility to isolate Assemblies for registering Areas. I had to hack out the internals of area registration, but they don't seem terribly complicated and this has been running reasonably well for me:
Easiest way to use this, for me, is
This has made noticeable improvements in start up time, at the expense of not being able to drop in an area and have the application automatically register it. However, that isn't a concern of mine in this case.
I'm not 100% sure if this will help in this specific case but could you combine all your 3rd party dlls into one dlls (hence removing the processing of all the individual files). This is what we have done using ILMerge at build time. Works like a charm. It will still need to look at the metadata for the dll (which will now be a bit larger) but it wont have to do as much IO.