La mémoire. Il s'agit de peut être mis en cache, c'est le travail de ngen.exe. Il génère une version .ni.dll de l'assemblage, contenant du code machine et stockée dans le GAC. Qui est automatiquement chargé par la suite, en contournant l'étape JIT.
Mais cela n'a pas grand-chose à voir avec le fait que votre programme démarre plus vite la deuxième fois. La première fois, vous avez ce qu'on appelle un "démarrage à froid". Qui est complètement dominé par le temps passé à trouver les DLL sur le disque dur. La deuxième fois, vous avez un démarrage à chaud, les DLL sont déjà disponibles dans le cache du système de fichiers.
Les disques sont lents. Un SSD est une solution évidente.
Pour info : ce n'est pas un problème exclusif au code géré. Les gros programmes non gérés avec beaucoup de DLLs l'ont aussi. Deux exemples canoniques, présents sur la plupart des machines de développement sont Microsoft Office et Acrobat Reader. Ils trichent. Lorsqu'ils sont installés, ils placent un "optimiseur" dans la clé de registre Exécuter ou dans le dossier Démarrage. Tout ce que font ces optimiseurs, c'est charger toutes les DLL que le programme principal utilise, puis quitter. Cela amorce le cache du système de fichiers, lorsque l'utilisateur utilise ensuite le programme, il démarrera rapidement puisque son démarrage à chaud est rapide.
Personnellement, je trouve cela extraordinairement ennuyeux. Parce que ce qu'ils vraiment est de ralentir tout autre programme que je pourrais vouloir lancer après m'être connecté. Ce qui est rarement le cas d'Office ou d'Acrobat. Je mets un point d'honneur à supprimer ces optimiseurs, à plusieurs reprises si nécessaire lorsqu'une fichue mise à jour les remet en place.
Vous pouvez aussi utiliser cette astuce, mais faites-le de manière responsable, s'il vous plaît.