Posté le 22/05/2008 20:12:00
Lorsque l'on fait appel appel à la méthode Compile sur des regex le code généré est chargé dans l'AppDomain courant et de ce fait ne peut être déchargé de la mémoire tant que l'AppDomain est en vie.
La question que l'on est en droit de se poser et de savoir s'il en est de même pour les expressions lambda introduites avec C# 3.
La réponse est simple : Concernant la méthode Compile qui concerne les expressions, la génération du code se base sur les DynamicMethods (http://msdn2.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx) qui ont la bonne idée de permettre d’indiquer qu’une méthode générée est orpheline (n’est plus référencée) et peut donc être collectée par le garbage collector.