有没有能提高 cursor 遍历效率的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
9527ox
V2EX    Android

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

  •  
  •   9527ox 2016-10-17 15:15:35 +08:00 13383 次点击
    这是一个创建于 3282 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到 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     Solana     1460 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 16:27 PVG 00:27 LAX 09:27 JFK 12:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86