複数の Regex コマンド (全部で約 20) を使用してメッセージを解析すると、パフォーマンスの問題が発生します。
効率を高めるために、私は次のことを行っています。
1)正規表現コマンドを可能性順に並べました。
2) 一致が見つかったら、一致するループから抜け出すようにしました。
私ができる他の改善点があるかどうか、または私の問題に対するより良いアプローチがあるかどうか疑問に思っています.
コーリング コード:
bool resolved = false;
Match regexMatch = null;
foreach (var resolverKvp in _resolvers)
{
if (resolverKvp.Key.Pattern.IsMatch(topicName))
{
regexMatch = resolverKvp.Key.Pattern.Match(topicName);
// Use the kvp value
resolved = true;
break;
}
}
繰り返し実行される正規表現コマンドのサンプル:
<add messagename="BackLayVolumeCurrencyOddsFormat" pattern="^.*/M/E_([0-9]+)/MEI/MDP/(\d{1,3})_(\d{1,3})_(\d+)_([a-zA-Z]{3})_([1-3])$" assembly="Client.Messaging"
type="Client.Messaging.TopicMessages.BackLayVolumeCurrencyOddsFormatResolver">
</add>
<add messagename="Market1" pattern="^.*/M/E_([0-9]+)$" assembly="Client.Messaging"
type="Client.Messaging.TopicMessages.Market1Resolver">
</add>
データ例:
regex 1:
6/E/E_1/E/E_511010/E/E_527901/E/E_631809/E/E_631810/E/E_631811/M/E_1379656/MEI/MDP/10_10_1_USD_3
regex 2:
1/E/E_1/E/E_100004/E/E_190539/E/E_632113/E/E_632120/M/E_1380084
前もって感謝します。