有没有能提高 cursor 遍历效率的方法

2016-10-17 15:15:35 +08:00
 9527ox
最近遇到 cursor 的问题,需要针对大概 5 万左右的数据从 sqlite 查询出来,然后通过 cursor 遍历转换成对应的数据对象,然后放在界面展示,这个过程中遍历 cursor 比较耗时,大家有没有更好的办法
10053 次点击
所在节点    Android
14 条回复
mmmage
2016-10-17 16:38:19 +08:00
不要一次全部展示,分页,一页一页的转就行了
9527ox
2016-10-17 18:38:22 +08:00
额,现在是一个部门下这么多人,我分页?这不太现实
PureDark
2016-10-17 18:49:17 +08:00
你一个界面展示 5w 条数据????
放哪???
JhZ7z587cYROBgVQ
2016-10-17 18:52:03 +08:00
可不可以这样做:取 5 个 cursor 然后对要取的范围分段,之后再拼接结果,这样子就可以做并发了
9527ox
2016-10-17 19:35:40 +08:00
@PureDark 其实非要说界面展示的在一个部门下 5 w 人这样有点钻牛角尖 ,但是目前在做压力测试的时候 就是在一个部门下放置 5 w 的数据量,然后在终端展示的时候就是要展示这些数据
9527ox
2016-10-17 19:37:31 +08:00
@jason0916 这不在乎并发的问题,关键在于查询数据的时候 遍历 cursor 这里,经过跟踪都在 mCursorWindow 中获取数据之后遍历 cursor 这个过程 数据量在哪里放着呢,就算分 5 个 cursor 查询也要针对所有的数据包装,而分 5 个 cursor 查询最终 cursor 遍历次数并没有减少 效果不大啊
inmyfree
2016-10-17 19:48:51 +08:00
@9527ox 果断分页,下拉加载更多啊
9527ox
2016-10-17 20:10:56 +08:00
@inmyfree 我之前想过这个方案,但是目前分页的这种方向根据的当前的需求来讲 是下策我还得在看看其他的方案
neoblackcap
2016-10-17 20:21:25 +08:00
一定是遍历,不能一口气全部读出吗?
9527ox
2016-10-17 20:22:12 +08:00
@neoblackcap 不经过 cursor 怎么一口气读?
neoblackcap
2016-10-17 20:26:48 +08:00
@9527ox 获取了 cursor 对象之后不是应该有 fetchAll 之类的方法吗?是 fetchAll 之类的方法慢?
9527ox
2016-10-18 15:24:01 +08:00
@neoblackcap 你确定 sqlite 里面有这个函数?? android 的 sqlite 里面有 ?
neoblackcap
2016-10-18 17:48:53 +08:00
@9527ox 嗯之前以为是别的语言,今天一看才是 Android ,的确是没有那样的方法,不过会不会遍历并不慢,慢的是你遍历过程中的操作呢?我看到其他的人基本上都是申请一个大的 buffer ,然后不断往里面写数据
9527ox
2016-10-19 17:15:49 +08:00
@neoblackcap 这个我跟踪过的 遍历内部过程操作没有耗时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX