V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
9527ox
V2EX  ›  Android

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

  •  
  •   9527ox · 2016-10-17 15:15:35 +08:00 · 10592 次点击
    这是一个创建于 2984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到 cursor 的问题,需要针对大概 5 万左右的数据从 sqlite 查询出来,然后通过 cursor 遍历转换成对应的数据对象,然后放在界面展示,这个过程中遍历 cursor 比较耗时,大家有没有更好的办法
    14 条回复    2016-10-19 17:15:49 +08:00
    mmmage
        1
    mmmage  
       2016-10-17 16:38:19 +08:00
    不要一次全部展示,分页,一页一页的转就行了
    9527ox
        2
    9527ox  
    OP
       2016-10-17 18:38:22 +08:00
    额,现在是一个部门下这么多人,我分页?这不太现实
    PureDark
        3
    PureDark  
       2016-10-17 18:49:17 +08:00
    你一个界面展示 5w 条数据????
    放哪???
    JhZ7z587cYROBgVQ
        4
    JhZ7z587cYROBgVQ  
       2016-10-17 18:52:03 +08:00
    可不可以这样做:取 5 个 cursor 然后对要取的范围分段,之后再拼接结果,这样子就可以做并发了
    9527ox
        5
    9527ox  
    OP
       2016-10-17 19:35:40 +08:00
    @PureDark 其实非要说界面展示的在一个部门下 5 w 人这样有点钻牛角尖 ,但是目前在做压力测试的时候 就是在一个部门下放置 5 w 的数据量,然后在终端展示的时候就是要展示这些数据
    9527ox
        6
    9527ox  
    OP
       2016-10-17 19:37:31 +08:00
    @jason0916 这不在乎并发的问题,关键在于查询数据的时候 遍历 cursor 这里,经过跟踪都在 mCursorWindow 中获取数据之后遍历 cursor 这个过程 数据量在哪里放着呢,就算分 5 个 cursor 查询也要针对所有的数据包装,而分 5 个 cursor 查询最终 cursor 遍历次数并没有减少 效果不大啊
    inmyfree
        7
    inmyfree  
       2016-10-17 19:48:51 +08:00
    @9527ox 果断分页,下拉加载更多啊
    9527ox
        8
    9527ox  
    OP
       2016-10-17 20:10:56 +08:00
    @inmyfree 我之前想过这个方案,但是目前分页的这种方向根据的当前的需求来讲 是下策我还得在看看其他的方案
    neoblackcap
        9
    neoblackcap  
       2016-10-17 20:21:25 +08:00
    一定是遍历,不能一口气全部读出吗?
    9527ox
        10
    9527ox  
    OP
       2016-10-17 20:22:12 +08:00
    @neoblackcap 不经过 cursor 怎么一口气读?
    neoblackcap
        11
    neoblackcap  
       2016-10-17 20:26:48 +08:00
    @9527ox 获取了 cursor 对象之后不是应该有 fetchAll 之类的方法吗?是 fetchAll 之类的方法慢?
    9527ox
        12
    9527ox  
    OP
       2016-10-18 15:24:01 +08:00
    @neoblackcap 你确定 sqlite 里面有这个函数?? android 的 sqlite 里面有 ?
    neoblackcap
        13
    neoblackcap  
       2016-10-18 17:48:53 +08:00
    @9527ox 嗯之前以为是别的语言,今天一看才是 Android ,的确是没有那样的方法,不过会不会遍历并不慢,慢的是你遍历过程中的操作呢?我看到其他的人基本上都是申请一个大的 buffer ,然后不断往里面写数据
    9527ox
        14
    9527ox  
    OP
       2016-10-19 17:15:49 +08:00
    @neoblackcap 这个我跟踪过的 遍历内部过程操作没有耗时
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5400 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 06:55 · PVG 14:55 · LAX 22:55 · JFK 01:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.