Kompilierung und Wiederverwendung
Standardmäßig kompiliert das Modul für reguläre Ausdrücke einen regulären Ausdruck in eine Folge interner Anweisungen (diese bestehen aus Codes hoher Ebene, die sich von denen in MSIL (Microsoft Intermediate Language) unterscheiden). Wenn das Suchmodul einen regulären Ausdruck ausführt, interpretiert es die internen Codes.
Wird ein Regex -Objekt mit der Option RegexOptions.Compiled erstellt, wird der reguläre Ausdruck in expliziten MSIL-Code kompiliert und nicht in die für reguläre Ausdrücke üblicherweise verwendeten internen Anweisungen in Hochsprache. Dadurch kann der JIT (Just-In-Time)-Compiler von .NET Framework den Ausdruck in systemeigenen Maschinencode konvertieren, um höhere Ausführungsgeschwindigkeiten zu erzielen.
Allerdings kann generierter MSIL-Code nicht entladen werden. Die einzige Möglichkeit zur Entladung von Code besteht darin, die gesamte Anwendungsdomäne zu entladen (d. h. den gesamten Code der Anwendung). Wenn ein regulärer Ausdruck mit der Option RegexOptions.Compiled kompiliert wurde, werden die von dem kompilierten Ausdruck verwendeten Ressourcen durch .NET Framework nie mehr freigegeben, auch wenn das Regex-Objekt selbst für die Garbage Collection freigegeben wird.
Begrenzen Sie auf jeden Fall die Anzahl der regulären Ausdrücke, die Sie mit der Option RegexOptions.Compiled kompilieren, um einen zu hohen Ressourcenverbrauch zu vermeiden. Ist eine Anwendung auf eine große Zahl regulärer Ausdrücke angewiesen, sollten diese interpretiert und nicht kompiliert werden. Wird wiederholt eine kleine Anzahl derselben regulären Ausdrücke verwendet, sollten diese mit der Option RegexOptions.Compiled kompiliert werden, um eine höhere Leistung zu erzielen. Als Alternative können auch vorkompilierte reguläre Ausdrücke verwendet werden. Alle Ausdrücke können in eine wiederverwendbare DLL kompiliert werden. Dadurch kann eine Kompilierung zur Laufzeit vermieden und der Geschwindigkeitsvorteil kompilierter regulärer Ausdrücke ausgenutzt werden.
Alle regulären Ausdrücke werden durch das Modul für reguläre Ausdrücke im Hauptspeicher zwischengespeichert, um die Leistung zu steigern. Dadurch wird vermieden, dass Ausdrücke bei jeder Verwendung erneut analysiert und in Bytecode höherer Ebene kompiliert werden müssen.