Assembly loading failure is very expensive.

 

  1. CLR will need to probe all the possible places before giving up. This is a lot of disk I/Os. If the application base is in UNC share or http, the performance will be much worse.
  2. If CLR can’t find anything by probing, CLR will ask Windows Installer to see if Windows Installer can provide the assembly. This process can be very expensive, depending on how many managed applications are installed on the machine.
  3. After everything is failed, CLR will raise AssemblyResolve event. The time spend is the AssemblyResolve event handler is essentially unbounded.

 

If you want to build a performant .Net framework application, you should minimize assembly loading failures as much as possible.

 

(Unfortunately due to resource fallback, there are lots of by-design assembly loading failures from resource manager.)