gpt4 book ai didi

c# - 使用多个 Regex 命令解析消息时的性能问题

转载 作者:行者123 更新时间:2023-11-30 21:06:40 25 4
gpt4 key购买 nike

我在使用多个 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;
}
}

迭代的正则表达式命令示例:

    <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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com