C#中字符串列表中的高性能“包含”搜索500,000根琴弦,每根大约100个字符长。给定一个搜索词,我想识别列表中包含搜索词的所有字符串。目前,我使用Select方法(“MATCH%term%”)对普通旧数据集执行此操作。这在我的笔记本电脑上大约需要600毫秒。我想让它更快,可能是100-200毫秒。推荐的方法是什么?性能至关重要,因此我可以在必要时(在合理范围内)交换内存占用以获得更好的性能一旦初始化,字符串列表就不会改变,因此计算散列也是一种选择。有没有人推荐哪种C#数据结构最适合这项任务?在执行快速全文搜索方面,我听说过有关Lucene.NET的好消息。他们已经完成了诸如找出最快的数据结构之类的工作。我建议给那个镜头。否则,您可以尝试这样的操作:varmatches=list.AsParallel().Where(s=>s.Contains(searchTerm)).ToList();但它可能不会让你下降到100毫秒。特里树或后缀树有助于加快速度——这实际上是全文搜索(通常)使用的。您可以使用C#中的实现,另请参阅此SO线程:LookingforasuffixtreeimplementationinC#?同样正如@leppie所提到的,并行执行可能已经为您提供了所需的x3性能增益。但话又说回来,你得仔细测量,没有它,谁也猜不到。您是否尝试过将字符串加载到列表中,然后使用Linq扩展Contains方法?varmyList=new列表();//加载列表的代码在这里...varsearchTerm="findthis";varmatch=myList.Contains(searchTerm);您是否尝试过以下方法?list.FindAll(x=>x.Contains("YourTerm")).ToList();List.AsParallel()出于某种原因。Where(...)在我的电脑上比list.FindAll(...)慢。list.AsParallel().Where(x=>x.Contains("YourTerm")).ToList();希望这对你有帮助。publicstaticboolContainsFast(thisIListlist,Titem){returnlist.IndexOf(item)>=0;根据我所做的测试,Contains的这个变体在我这边快了大约33%。您应该尝试使用Dictionary类。它比List快得多,因为它是索引搜索。以上就是C#学习教程:C#中字符串列表的高性能“包含”搜索与分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——DictionaryldapDocument=newDictionary();//在此处加载您的列表//示例->ldapDocument.Add("014548787","014548787");varmatch=ldapDocument.ContainsKey(stringToMatch);侵权请点击右侧联系管理员删除。如需转载请注明出处:
