マイクロソフトではMatchというメソッドを使用して、入力文字列内の特定の位置から始まるRegexパターンに一致するメソッドを提供しています。私がやろうとしているのは、static method version of Matchを使って自分のプログラムのパフォーマンスを最適化し、そこにキャッシュの利点を得ることです。メンバーのバージョンでも、マッチングを開始する特定の位置を指定する方法はありません。とにかくこれをエミュレートするか、入力文字列内の特定の場所でパターンを検索することができない、別の静的メソッドがありますか?どんな助けもありがとう。Regex.Match静的メソッドを使用して特定の位置から一致するものを見つける
答えて
あなたはSystem.dllの内部を見るためにDotPeekのような逆アセンブラツールを使用する場合は、静的な関数の実装は、新しい正規表現オブジェクトを作成することがわかります:
public static Match Match(string input, string pattern)
{
return new Regex(pattern, RegexOptions.None, true).Match(input);
}
public static Match Match(string input, string pattern, RegexOptions options)
{
return new Regex(pattern, options, true).Match(input);
}
だから、実際にはそれだけです反対に - 静的関数は悪い(または少なくとも良い)パフォーマンスを持っています。
実際にはRegexオブジェクトを作成しますが、[Microsoftによると](http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.cachesize.aspx)、静的正規表現呼び出しは15の(デフォルトで)式のキャッシュを維持します。静的なMatch()メソッドを初めて呼び出すと、それは遅くなる可能性があります。しかし、同じRegexを使って一致するテキストは、そのキャッシュとRegexライブラリが式を再コンパイルする必要がないので、より速くなるはずです。 – Icemanind
私は静的メソッドの実装を貼り付けてコピーします。インスタンスを作成してインスタンスに対してMatchを呼び出すことだけです。キャッシングが存在する場合、それはインスタンスメソッドにあるか、存在しません。 –
実際、このリンクではキャッシュサイズについて言及しています。キャッシュは、RegexOptions.Compiledを指定するときに使用されるものです。インスタンス作成時にそのオプションを指定できます。だからもう一度 - 違いはありません - 静的メソッドは単なる利便性です。 –
最適化が必要ですか?数ミリ秒の違いは本当に重要ですか?あなたは何かに多くの努力を費やしてお返しをしたくないのです。 –
今、私のプログラムは、Visual Studioプロファイラによれば、毎秒約1000件のマッチを解析しています。私の最適化を得ることは、「必要性」自体ではありませんが、より速く、より良い、正しいですか? – Icemanind
正規表現を作成するときに 'RegexOptions.Compiled'を指定し、Matchメソッドの" member version "を使うことができます。これにより、正規表現エンジンによる「キャッシュ」動作とほぼ同じ効果が得られます。 –