Normal ifadelerde derleme ve yeniden kullanma

Normal ifade altyapısının ifadeleri nasıl derlediğini ve normal ifadelerin nasıl önbelleğe alındığını anlayarak normal ifadeleri kapsamlı bir şekilde kullanan uygulamaların performansını iyileştirebilirsiniz. Bu makalede derlenmiş normal ifadelerin derlenmesi, kaynak oluşturulması ve önbelleğe alınmasını ele alınmaktadır.

Yorumlanan normal ifadeler

Varsayılan olarak, normal ifade altyapısı normal ifadeyi iç yönergeler dizisine derler (bunlar ortak ara dilden veya CIL'den farklı üst düzey kodlardır). Altyapı normal bir ifade yürüttüğünde iç kodları yorumlar.

Derlenmiş normal ifadeler

Bir Regex nesne seçeneğiyle RegexOptions.Compiled oluşturulursa, normal ifadeyi üst düzey normal ifade iç yönergeleri yerine açık CIL koduna derler. Bu, öğesine izin verir. DAHA yüksek performans için ifadeyi yerel makine koduna dönüştürmek için NET'in tam zamanında (JIT) derleyicisi. Nesneyi oluşturmanın Regex maliyeti daha yüksek olabilir, ancak onunla eşleşme gerçekleştirme maliyeti çok daha küçük olabilir.

Kaynak tarafından oluşturulan normal ifadeler

Normal ifadeler için kaynak oluşturma .NET 7 ve sonraki sürümlerde kullanılabilir. Kaynak oluşturucu, C# kodu olarak, IL'de yayılana RegexOptions.Compiled benzer bir mantığa sahip özel Regextüretilmiş bir uygulama yayar. 'nin tüm aktarım hızı performans avantajlarını RegexOptions.Compiled ve başlangıç avantajlarını Regex.CompileToAssembly, ancak karmaşıklığı CompileToAssemblyolmadan elde edersiniz. Yayılan kaynak projenizin bir parçasıdır ve bu da kolayca görüntülenebilir ve hata ayıklanabilir olduğu anlamına gelir.

Mümkün olduğunda, seçeneğini kullanarak RegexOptions.Compiled normal ifadeleri derlemek yerine kaynak tarafından oluşturulan normal ifadeleri kullanın. Kaynak tarafından oluşturulan normal ifadeler hakkında daha fazla bilgi için bkz . .NET normal ifade kaynak oluşturucuları.

Normal ifadeler önbelleği

Performansı geliştirmek için normal ifade altyapısı, derlenmiş normal ifadelerin uygulama genelinde bir önbelleğini tutar. Önbellek, yalnızca statik yöntem çağrılarında kullanılan normal ifade desenlerini depolar. (Örnek yöntemlerine sağlanan normal ifade desenleri önbelleğe alınmaz.) Önbelleğe alma, bir ifadeyi her kullanıldığında üst düzey bayt koduna ayrıştırma gereğini önler.

Önbelleğe alınmış en fazla normal ifade sayısı, (Shared Visual Basic'te) Regex.CacheSize özelliğinin static değerine göre belirlenir. Varsayılan olarak, normal ifade altyapısı en fazla 15 derlenmiş normal ifadeyi önbelleğe alır. Derlenen normal ifadelerin sayısı önbellek boyutunu aşarsa, en son kullanılan normal ifade atılır ve yeni normal ifade önbelleğe alınır.

Uygulamanız normal ifadeleri aşağıdaki iki yoldan biriyle yeniden kullanabilir:

  • Normal ifadeyi tanımlamak için nesnesinin Regex statik bir yöntemini kullanarak. Başka bir statik yöntem çağrısı tarafından önceden tanımlanmış bir normal ifade deseni kullanıyorsanız, normal ifade altyapısı bunu önbellekten almaya çalışır. Önbellekte kullanılamıyorsa, altyapı normal ifadeyi derler ve önbelleğe ekler.
  • Mevcut Regex bir nesneyi normal ifade deseni gerektiği sürece yeniden kullanarak.

Nesne örnekleme ve normal ifade derleme yükü nedeniyle, çok sayıda Regex nesnenin oluşturulması ve hızla yok edilmesi pahalı bir işlemdir. Çok sayıda farklı normal ifade kullanan uygulamalar için, statik Regex yöntemlere yapılan çağrıları kullanarak ve muhtemelen normal ifade önbelleğinin boyutunu artırarak performansı iyileştirebilirsiniz.

Ayrıca bkz.