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

标签 c# regex windows-phone-8

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

我在该文本框中的 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 失去焦点时触发验证。

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

关于c# - 什么是优化我的正则表达式匹配的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379922/

相关文章:

c# - XNA 4.0 - Alpha 和多个纹理......搞砸了

c# - 我可以在 Mysql 的一个连接字符串下创建多个不同的插入查询吗?

Java - 分割目录路径的正则表达式

c# - 如何使用正则表达式精确匹配或列出

使用 TextWrangler 的正则表达式删除重复的行开头

c# - Windows 手机 8 : Localization doesn't work

c# - 对 Windows Phone 8 应用程序中的相同图标文件感到困惑

windows-phone-7 - 如何在Windows Phone 8 中获取MCC 和MNC

c# - WPF在不同窗口中镜像网格内容

c# - await 和 async 与 Task 并行库的区别