以下に示すような正規表現の比較を行うコードがあり、コードを最適化することを考えました。.net プロファイラーで確認すると、ここで 80% の時間が費やされていることが示され、正規表現フィルターでバックトラッキングが発生するかどうかを確認しましたが、その正規表現側に問題はありませんでした。これは既存のコードです
public class TestFilter : SmoothFilter
{
public override bool Apply(Team liveEvent)
{
// Apply each individual piece of the filter using the Match method
if ((Filter == null) || (Filter.Length <= 0) || Match(Filter, pl.Instance))
{
}
private bool Match(string pattern, string inputdata)
{
bool vals = Regex.IsMatch(inputdata, pattern, RegexOptions.IgnoreCase);
return vals;
}
}
私がグーグルで検索したとき、リンクhttp://blog.kurtschindler.net/post/regular-expression-performance-comparisonsを見たところ、初期起動時間がかからない場合の最良かつより高速な方法について言及されています。そのため、以下に示すようにコードを変更しました。しかし、私は自分のシステムを動かしたので、プロファイリングするツールがありません 本当に改善されたかどうか教えてもらえますか? 以下のこの変更されたコード
static readonly Regex regexForMethod_E = new Regex("pattern", RegexOptions.Compiled);
private bool Match(string pattern, string inputdata)
{
bool vals = regexForMethod_E.IsMatch("inputdata");
return vals;
}
編集
Match() メソッド内で正規表現のインスタンス化を移動する方法がまだわかりません