The word excessive is a relative term. What might seem excessive to you could be normal to me, and vice versa. Walt mentioned last week that he has a client who insists on shipping everything in a single assembly – which sounded excessively restrictive to us. On the other end of the scale, someone in the newsgroups posted about the slow startup time of an ASP.NET application composed of 300 assemblies. 300! Certainly 300 is an excessive number, right?
Loading a DLL isn’t a hugely expensive operation - but it doesn’t come free either. Years ago we used to use tools like Rebase to minimize load times. (For the curious, Visual Studio 2003 appears to use 0x11000000 as the preferred load address for a DLL, you can see this under Project -> Properties -> Configuration Properties –> Advanced -> Base Address).
The real problem with having 300 assemblies on hand isn’t the load time, but the time it takes to manage the dependencies and versioning among all the units. I favor starting with rather coarse grained units of deployment. As time progress one can always factor out pieces to be put in separate assemblies to reuse or deploy in distributed fashion.
As William Blake once wrote: Excessive sorrow laughs. Excessive Joy Weeps.