当前位置:  开发笔记 > 数据库 > 正文

Sqlite + 80K行+ LIKE =键盘滞后

如何解决《Sqlite+80K行+LIKE=键盘滞后》经验,为你挑选了1个好方法。

我有这个问题,我一直推迟解决,但现在是时候了.

我有一个基本的字典程序.它有一个UISearchBar和一个UITableView.它的工作方式除了在设备上运行时它会导致键盘滞后.(模拟器很好,当然)我有两种类型的搜索.按你型和回程.我发现两者都需要大约相同的时间来返回结果,但是As-you-type会使键盘滞后.

我有UISearchBar textDidChange,它接受searchText并将其发送到执行所有sqlite提升的搜索方法,将结果放入Array中.重新加载表格.

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    if((searchType == SEARCH_AS_YOU_TYPE) && ([searchText length] >= 2)){
        NSString *myKeyword = [NSString stringWithFormat:@"%@", searchText];
        [self search:myKeyword];
        [myTableView reloadData];
    }
}

我将结果限制为50.我的SQL查询使用了LIKE和OR,还没有办法解决.

SELECT WORD_ID, DEFIN, PINYIN, SIMP, TRAD from WORDS where DEFIN LIKE "%to dog %" OR DEFIN LIKE "%dog" OR DEFIN LIKE "%dog%"  ORDER BY DEFIN LIMIT 50

我也尝试将[myTableView reloadData]移动到搜索方法中,希望键盘至少不会滞后.没有喜悦.遗憾的是,我知道sqlite基本上是检查每一行,当它使用like运算符时.但是对于80人来说3-4秒似乎有点慢.

任何想法,想法,意见或建议将不胜感激!



1> markus_b..:

听起来你正在搜索并在同一个线程中准备好键盘.这样,您将搜索与字符一样多的次数,并且打字速度仅限于搜索速度.

一个合适的解决方案是将其分为两个线程,一个用于读取和显示键盘,第二个用于搜索和显示搜索结果.这样,如果您输入的速度比搜索速度快,那么只有搜索会滞后,而不是输入.例如,Firefox地址栏以这种方式工作.

由于两个线程以及两者之间的通信/协调,您的代码将更加复杂,但我认为这是唯一的好解决方案.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有