Fewer smaller .Net DLLs vs less large DLLs

12/28/2009

2 minutes to read

In this article

Generally speaking it is better to have less large DLLs versus many smaller DLLs for the following reasons:

Hard Disk time: Loading 100 dlls will almost always take longer than a single large DLL. DLLs are physically scattered across the disk. Latency etc come into play on the initial load times.

Memory Usage: A single dll contains 1 set of "standard" meta data vs 100 times that standard meta data can start to make up some memory space (i.e. X bytes of product name, version info, etc x 100 dlls x # of app domains = memory)

Security: .Net CLR has to do a lot more processing with multiple DLLs vs less DLLs. A security policy will need to be loaded, managed, and executed per each DLL.

CLR Management: If DLLs do not specifically call for a unique "base address" so the CLR must re-base each DLL when it loads them costing startup cycle time. Also when code executes the CLR must locate the object in memory and if it has to go through a "lookup table" of those addresses it will take longer to find one if multiple DLLs are used.

Management: Locating code, determining DLL references to use, build scripts, etc will take more time to manage in the SDLC.

Optimization: The .Net compiler can make more and better optimization decisions if acting on more code base. Smaller sets of code will provide less optimization opportunities.

Maintenance: Managing the additional project files, assembly info files, etc add time and understanding to developers.

Additional information: http://blogs.msdn.com/brada/archive/2004/05/05/126934.aspx