使用多个Regex命令(总共约20个)解析消息时出现性能问题:
为了提高效率,我有:
1)通过相似性订购Regex命令。
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;
}
}
通过以下方式迭代的Regex命令示例:
<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
先感谢您。
最佳答案
首先(小的)值得注意的是,找到的正则表达式执行两次:一次检查匹配项,然后找到匹配项。不确定ismatch会带来多少性能差异,但是您可以结合检查并找到以下内容:
regexMatch = resolverKvp.Key.Pattern.Match(topicName);
if (regexMatch.Success)
{
//etc
关于c# - 使用多个Regex命令解析消息时的性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10994507/