versioni statiche o di istanza di Regex.Match in C #

Ho notato del codice che utilizza il metodo statico:

Regex.IsMatch([someRegexStr], [someInputStr]) 

Vale la pena sostituirlo con il metodo di istanza? Piace:

 private readonly Regex myRegex = new Regex([someRegexStr]); ... myRegex.IsMatch([someInputStr]); 

Uno dei consigli di ottimizzazione delle espressioni regolari nel seguente link: Ottimizzazione dell’espressione regolare di Jim Mischel

Per prestazioni migliori su espressioni regolari di uso comune, costruisci un object Regex e chiama i suoi metodi di istanza.

L’ articolo contiene argomenti interessanti come la memorizzazione nella cache di espressioni regolari e la compilazione di espressioni regolari insieme a consigli di ottimizzazione.

Esiste qualche elaborazione iniziale che si verifica quando si chiama il metodo statico Regex.IsMatch() , essenzialmente per convalidare la propria espressione regolare e convertirla in una rappresentazione a macchina a stati finiti.

Se si pianifica di eseguire la stessa corrispondenza regolare più volte, probabilmente è meglio creare un’istanza di un’istanza Regex e chiamare il metodo IsMatch () dell’istanza. È ansible avere l’epxression compilato in bytecode CLR utilizzando il flag RegexOptions.Compiled , che migliora ulteriormente le prestazioni.

Sì, soprattutto se riesci a farne un’espressione compilata. È più lento build l’object Regex questo modo, ma molto più velocemente da usare per una vittoria netta.

Modifica: Potenzialmente (probabilmente ++) molto più veloce. Non è necessario che la CLI abbia una buona ottimizzazione, ma ho intenzione di indovinare che Microsoft è certamente. : D

 private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled); 

Le ultime 15 rappresentazioni interne di espressioni regolari create dalla chiamata statica vengono memorizzate nella cache.

Parlo di questo e del funzionamento interno di ” How .NET Regular Expressions Really Work .”