我有以下代码,我正在努力加快:
private bool IsValidProduct(string productName)
{
return (productName.IndexOf("something", StringComparison.InvariantCultureIgnoreCase) == -1 &&
productName.IndexOf("whatever", StringComparison.InvariantCultureIgnoreCase) == -1 &&
productName.IndexOf("blah", StringComparison.InvariantCultureIgnoreCase) == -1 &&
productName.IndexOf("keyword", StringComparison.InvariantCultureIgnoreCase) == -1 &&
productName.IndexOf("etc...", StringComparison.InvariantCultureIgnoreCase) == -1);
}
我目前正在检查大约十几个单词。
这样做的最快方法是什么?
答案 0 :(得分:5)
正则表达式不是一个好主意,尝试这样的事情:
List<string> keywords = new List<string>
{
"something",
"whatever",
"keyword",
"etc"
};
return keywords.All(keyword => !productName.Contains(keyword));
答案 1 :(得分:2)
您可以将productName
转换为小写,然后使用.Contains
。应该快一点。由于你使用的是不变的文化,这应该有用(有些文化没有)。
string lowerProductName=productName.ToLowerInvariant();
return !(lowerProductName.Contains("1")||
lowerProductName.Contains("2"));
有一些技术可以让它更快,但你不太可能需要它们。而且它们实施起来更复杂。特别是因为你只有一些简短的关键词。
但是我同意Cody的说法,你应该首先介绍一下,看看这个代码是否真的让你失望。
答案 2 :(得分:2)
我目前正在检查大约十几个单词。
我认为这意味着您确实没有性能问题。
但正则表达式解决方案看起来像:
var r = new Regex("something|whatever|blah", RegexOptions.IgnoreCase);
return ! r.ismatch(productName);
在我看来,这至少是可读的。而且我相信它会更快,但你必须要分析。
为了提高性能,您必须缓存&amp;重用RegEx实例。创建它是一个昂贵的部分。
答案 3 :(得分:0)
如何使用Rabin-Karp的实现来搜索目标文本中的一组关键字?
或Boyer-Moore哪个是快速字符串搜索的黄金标准,但一次只能搜索一个字符串?