Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Výkon aplikací, které výrazně využívají regulární výrazy, můžete optimalizovat pochopením toho, jak modul regulárních výrazů kompiluje výrazy a jak se regulární výrazy ukládají do mezipaměti. Tento článek popisuje kompilaci, generování zdrojového kódu a ukládání kompilovaných regulárních výrazů do mezipaměti.
Interpretované regulární výrazy
Modul regulárních výrazů ve výchozím nastavení zkompiluje regulární výraz do posloupnosti interních instrukcí (jedná se o kódy vysoké úrovně, které se liší od společného zprostředkujícího jazyka nebo CIL). Když modul spustí regulární výraz, interpretuje interní kódy.
Kompilované regulární výrazy
Regex Pokud je objekt vytvořen s možností RegexOptions.Compiled, zkompiluje regulární výraz na explicitní kód v CIL namísto interních instrukcí regulárního výrazu na vysoké úrovni. To umožňuje kompilátoru .NET JIT (just-in-time) převést výraz na nativní strojový kód, což přináší vyšší výkon. Náklady na vytvoření objektu Regex mohou být vyšší, ale náklady na provádění shod s ním budou pravděpodobně mnohem menší.
Regulární výrazy generované zdrojem
Generování zdrojového kódu pro regulární výrazy je k dispozici v .NET 7 a novějších verzích. Zdrojový generátor generuje jako C# kód vlastní implementaci odvozenou z Regex, která má logiku podobnou té, co RegexOptions.Compiled generuje v IL. Získáte veškeré výhody propustnosti a počáteční výhody Regex.CompileToAssembly, ale bez složitosti CompileToAssembly. Zdroj, který se uvolní, je součástí vašeho projektu, což znamená, že je také snadno dostupný a snadno laditelný.
Pokud je to možné, místo kompilování regulárních výrazů pomocí RegexOptions.Compiled možnosti používejte zdrojové generované regulární výrazy. Další informace o zdrojových generovaných regulárních výrazech najdete v tématu Generátory zdrojů regulárních výrazů .NET.
Mezipaměť regulárních výrazů
Aby se zlepšil výkon, modul regulárních výrazů udržuje mezipaměť kompilovaných regulárních výrazů v celé aplikaci. Mezipaměť ukládá vzory regulárních výrazů, které se používají pouze ve voláních statických metod. (Vzory regulárních výrazů zadané pro metody instancí nejsou uložené v mezipaměti.) Ukládání do mezipaměti zabraňuje nutnosti přepsat výraz do kódu vysoké úrovně při každém použití.
Maximální počet regulárních výrazů uložených v mezipaměti je určen hodnotou static vlastnosti (Sharedv jazyce Visual Basic). Regex.CacheSize Modul regulárních výrazů ve výchozím nastavení ukládá do mezipaměti až 15 zkompilovaných regulárních výrazů. Pokud počet zkompilovaných regulárních výrazů překročí velikost mezipaměti, zahodí se nejméně naposledy použitý regulární výraz a nový regulární výraz se ukládá do mezipaměti.
Vaše aplikace může opakovaně používat regulární výrazy jedním z následujících dvou způsobů:
- Pomocí statické metody objektu Regex definovat regulární výraz. Pokud používáte vzor regulárního výrazu, který už byl definován jiným voláním statické metody, modul regulárních výrazů se ho pokusí načíst z mezipaměti. Pokud není v mezipaměti k dispozici, modul zkompiluje regulární výraz a přidá ho do mezipaměti.
- Opětovným použitím existujícího Regex objektu, pokud je potřeba jeho vzor regulárního výrazu.
Kvůli režii vytváření instancí objektů a kompilace regulárních výrazů je vytváření a rychlé zničení mnoha Regex objektů nákladným procesem. U aplikací, které používají velký počet různých regulárních výrazů, můžete optimalizovat výkon pomocí volání statických Regex metod a případně zvýšením velikosti mezipaměti regulárních výrazů.