高性能"包含"在C#中的字符串列表中搜索

njr*_*101 15 c# sorting string search contains

我有一个大约的列表.500,000根弦,每根约.100个字符长.给定一个搜索词,我想识别列表中包含搜索词的所有字符串.目前,我使用Select方法("MATCH%term%")使用普通旧数据集执行此操作.我的笔记本电脑大约需要600毫秒.我想让它更快,也许100-200ms.

什么是推荐的方法?

性能至关重要,因此我可以在必要时(在合理范围内)交换内存占用以获得更好的性能 一旦初始化,字符串列表就不会改变,因此计算哈希值也是一种选择.

有没有人有推荐,哪种C#数据结构最适合这项任务?

Str*_*ior 17

在执行快速全文搜索时,我听说过Lucene.NET的好消息.他们已经完成了找出最快的数据结构等工作.我建议给他一个机会.

否则,您可能会尝试这样的事情:

var matches = list.AsParallel().Where(s => s.Contains(searchTerm)).ToList();
Run Code Online (Sandbox Code Playgroud)

但它可能不会让你下降到100毫秒.

  • 谢谢@StriplingWarrior.搜索现在已降至约50毫秒.我不需要实现任何特殊的算法.使用Linq和字符串列表的组合就足够了.猜猜数据集带来了比我想象的更多的开销. (2认同)