Compilation et réutilisation

Par défaut, le moteur des expressions régulières compile une expression régulière sous la forme d'une séquence d'instructions internes (il s'agit de codes avancés différents du langage MSIL (MSIL, Microsoft Intermediate Language). Lorsque le moteur exécute une expression régulière, il interprète les codes internes.

Si un objet Regex est construit avec l'option RegexOptions.Compiled, il compile l'expression régulière sous forme de code MSIL explicite au lieu d'instructions internes d'expressions régulières avancées. Cela permet au compilateur juste-à-temps (JIT) du .NET Framework de convertir l'expression en code machine natif afin d'obtenir de meilleures performances.

Cependant, le MSIL généré ne peut pas être déchargé. La seule façon de décharger du code consiste à décharger l'intégralité d'un domaine d'application (c'est-à-dire à décharger tout le code de votre application.). Effectivement, une fois qu'une expression régulière est compilée avec l'option RegexOptions.Compiled, le .NET Framework ne libère plus les ressources utilisées par l'expression compilée, même si l'objet Regex lui-même est libéré et fait l'objet d'un garbage collection.

Vous devez veiller à limiter le nombre d'expressions régulières différentes que vous compilez avec l'option RegexOptions.Compiled afin d'éviter de consommer trop de ressources. Si une application doit utiliser un nombre important ou illimité d'expressions régulières, chaque expression doit être interprétée, pas compilée. Toutefois, si seules quelques expressions régulières sont utilisées de façon récurrente, elles doivent être compilées avec RegexOptions.Compiled, ce dans le but d'obtenir de meilleures performances. Une autre solution consiste à utiliser des expressions régulières précompilées. Vous pouvez compiler l'ensemble de vos expressions dans un fichier .dll réutilisable. Il devient alors inutile de compiler au moment de l'exécution, mais vous bénéficiez néanmoins de la rapidité d'expressions régulières compilées.

Pour améliorer les performances, le moteur des expressions régulières met en cache toutes les expressions régulières. Cela évite toute nouvelle analyse d'une expression en code avancé lors de chaque utilisation.

Voir aussi

Autres ressources

Expressions régulières du .NET Framework