C# 在字典的键中使用正则表达式的性能问题

C# 在字典的键中使用正则表达式的性能问题,c#,regex,dictionary,C#,Regex,Dictionary,我已经扩展了这个类,以接受包含通配符的字符串作为事件类型,因此我能够编写如下内容 Messenger.AddListener("*", () => Console.WriteLine("woohoo, generic handler")); 但我高度关注这一实施的绩效 我对Dictionary类进行了如下扩展: public class EventDictionary : Dictionary<string, Delegate> { public De

我已经扩展了这个类,以接受包含通配符的字符串作为事件类型,因此我能够编写如下内容

Messenger.AddListener("*", () => Console.WriteLine("woohoo, generic handler"));
但我高度关注这一实施的绩效

我对Dictionary类进行了如下扩展:

public class EventDictionary : Dictionary<string, Delegate>
    {
        public Delegate[] GetHandlers(string Event)
        {
            List<Delegate> matches = new List<Delegate>();
            foreach (string pattern in Keys)
                if (Regex.IsMatch(Event, Regex.Escape(pattern).Replace( @"\*", ".*" ).Replace( @"\?", "." )))
                    matches.Add(this[pattern]);
            UnityEngine.Debug.Log(matches.Count);
            return matches.ToArray();
        }
    }
公共类事件字典:字典
{
公共委托[]GetHandlers(字符串事件)
{
列表匹配项=新列表();
foreach(键中的字符串模式)
if(Regex.IsMatch(事件,Regex.Escape(模式).Replace(@“\*”,“*”).Replace(@“\?”,“))
匹配。添加(此[模式]);
UnityEngine.Debug.Log(matches.Count);
返回匹配项。ToArray();
}
}
如您所见,对于字典中的每个键,我首先将其转换为正则表达式,然后检查它是否与事件名称匹配,如果匹配,则将其添加到集合并返回数组

但是,这段代码运行在一个经常使用messenger脚本的游戏中,因此我非常关心这种方法的性能

我的解决方案可以接受吗?如果不是,解决我的问题的更好方法是什么


非常感谢

我希望会有更有效的方法来实施和实现相同的行为。我想问题是,您需要通配符处理程序(我解释为通配符处理程序)达到什么目的?在字典中存储正则表达式怎么样?(该词典不应该是一个多重映射或仅仅是一个元组/对列表吗?如果有人添加另一个
*
?)这个问题似乎是离题的,因为它是关于检查工作代码的性能,这更适合于。看起来你有
列表,而不是询问是否有问题,自己运行测试来发现问题可能更为谨慎,如果没有问题,就不要在上面花费更多的时间。