Nik*_*han 3 c# linq optimization search
我有一个二维对象数组(主要是,但不是唯一的字符串),我想sSearch用LINQ 过滤一个字符串().以下查询有效,但速度不如我想的那么快.
我已经改变Count了Any,这导致了速度的显着提高,取而代之的Contains是一个忽略大小写的正则表达式,从而消除了对它的调用ToLower.结合这使得执行时间减少了一半多.
现在非常值得注意的是,将搜索项的长度从1增加到2个字母会使执行时间增加三倍,并且还会有另外一个从3到4个字母的跳转(执行时间增加约50%).虽然这显然不足为奇但我想知道是否还有其他方法可以优化字符串的匹配?
Regex rSearch = new Regex(sSearch, RegexOptions.IgnoreCase);
rawData.Where(row => row.Any(column => rSearch.IsMatch(column.ToString())));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数据集有大约10k行和50列,但大小可能会有相当大的变化.
任何关于如何优化这一点的建议将不胜感激.
一个优化是使用Any而不是Count- 只要找到一个匹配列,就可以返回该行.
rawData.Where(row => row.Any(column => column.ToString()
.ToLower().Contains(sSearch)))
Run Code Online (Sandbox Code Playgroud)
您还应该意识到ToLower文化敏感.如果你的情况可能不是问题,但值得注意.对你来说ToLowerInvariant 可能是更好的选择.遗憾的是,没有一个重载Contains可以让你指定你想要一个不区分大小写的匹配...
编辑:你现在正在使用正则表达式 - 你试过RegexOptions.Compiled吗?它可能有助于......
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |