Skip to main content
 首页 » 编程设计

c#之什么是优化我的正则表达式匹配的最佳方式

2024年02月13日26youxin

我有一个带有文本框的应用程序。用户在此框中输入文本。

我在该文本框中的 OnKeyUp 事件中触发了以下函数

private void bxItemText_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) 
{                
    // rules is an array of regex strings 
    foreach (string rule in rules) 
    { 
        Regex regex = new Regex(rule); 
        if (regex.Match(text.Trim().ToLower())) 
        { 
            // matched rule is a variable 
            matchedRule = rule; 
            break; 
        } 
    } 
} 

我在 rules 中有大约 12 个字符串,尽管这可能会有所不同。

一旦文本框中的文本长度超过 80 个字符,性能就会开始下降。在 100 个字符后输入一个字母需要一秒钟才能显示出来。

我该如何优化它?我应该每 3 次 KeyUp 匹配一次吗?我是否应该完全放弃 KeyUp 而只是每隔几秒自动匹配一次?

请您参考如下方法:

How do I optimise this? Should I match on every 3rd KeyUp ? Should I abandon KeyUp altogether and just auto match every couple of seconds?

我会选择第二个选项,即放弃 KeyUp 并每隔几秒触发一次验证,或者更好的是在 TextBox 失去焦点时触发验证。

另一方面,我应该建议预先缓存正则表达式并编译它们,因为看起来你一遍又一遍地使用它们,换句话说,不是将规则作为字符串存储在该数组中,你应该存储在添加或加载它们时将它们作为已编译的正则表达式对象。