string 集合中最快的搜索方式

问题:

我有一个大概包含 120,000 个用户(string类型)数据的文件,想把这些数据存到一个集合中以及随后执行搜索。每当用户改变某TextBox的文本时,搜索函数被调用,结果是包含TextBox文本的字符串。我不必改变列表(change the list),仅仅是浏览结果(pull the results)和把结果放入listbox。

目前我尝试过的:

我试着用不同的集合/容器,集合/容器里面是从外部文件导入字符串的入口(当然,只导入一次);

随后使用linq查询:

搜索事件(当搜索文本发生变化时触发):

结果:

二者都给我一个较差的时间响应(每次按键间隔大概(需要)1-3s)

问题:

瓶颈在哪里呢?我使用的集合?搜索函数?还是二者都是?怎么才能在功能表现上获得更好性能?

推荐回答:

你可以考虑在后台线程(调用回调函数)执行搜索过滤,或者简单地在输入发生变化时重新执行过滤。

通常的想法是能够像下面这样使用:

一个粗略描述类似于下面:

当父窗口(即Form)被释放时,实际上你也应该释放_filter句柄。这表明你应该打开(编写)和编辑Form的Dispose()方法(位于YourForm.Designer.cs),看起来与下面类似:

在我的电脑上,它运行的非常快,因此在寻找一个更复杂的解决方法前,你应该检测和剖析这个方法。

上面说的“更复杂的解决方法”可能是指在字典结构(dictionary)中存贮最后一对结果,然后通过仅与新入口比较开始和最后字符不同来过滤掉不同的新入口。

收藏 1 评论

关于作者:孤舟8027

(新浪微博:@孤舟8027) 个人主页 · 我的文章

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部