Share via


編譯和重複使用

根據預設,規則運算式引擎會將規則運算式編譯為內部指令的序列 (Sequence) (這些是不同於 Microsoft Intermediate Language (MSIL) 的高階程式碼)。當引擎執行規則運算式時,它將會解譯內部程式碼。

如果 Regex 物件以 RegexOptions.Compiled 選項來建構,它會將規則運算式編譯成明確 MSIL 程式碼,以代替高階規則運算式內部指令。這允許 .NET Framework 的 Just-in-Time (JIT) 編譯器 (Compiler) 轉換運算式至較高效能的原生機器碼。

然而,產生的 MSIL 不能卸載。卸載程式碼的唯一方式就是要卸載整個應用程式定義域 (亦即,要卸載您應用程式的全部程式碼)。實際上,一旦規則運算式以 RegexOptions.Compiled 選項編譯之後,.NET Framework 絕不會釋放已編譯運算式所使用的資源,即使 Regex 物件本身被釋放並被記憶體回收。

您必須小心限制您以 RegexOptions.Compiled 選項編譯的不同規則運算式數目,以避免消耗太多資源。如果應用程式必須使用大量或未限制數目的規則運算式,應該要解譯而不是編譯各個運算式。然而,如果要反覆使用少數規則運算式,應該用 RegexOptions.Compiled 編譯它們以獲至較高效能。另外一種方式是使用預先編譯好的規則運算式。您可以將所有的運算式編譯成可重複使用的 dll 檔。這麼做便不需要在 Runtime 時進行編譯,而且仍然可以享有已編譯好規則運算式的速度。

若要改善效能,規則運算式引擎會在記憶體中快取所有規則運算式。這避免在每次使用它時,還要重新剖析運算式為高階位元組程式碼。

請參閱

其他資源

.NET Framework 規則運算式