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

SQLite 打开和关闭数据库需要占用很多资源么?

  •  
  •   alexrezit · 2012-12-19 15:12:49 +08:00 · 4647 次点击
    这是一个创建于 4391 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道该不该把 loadDatabase 和 closeDatabase 封装进单个方法里面.
    如果打开和关闭数据库需要占用很多资源的话, 当需要连续调用方法的时候重复地打开和关闭效率会很低.
    但如果不封装的话, 每次操作前后都要 loadDatabase 和 closeDatabase, 很麻烦.
    6 条回复    1970-01-01 08:00:00 +08:00
    alexrezit
        1
    alexrezit  
    OP
       2012-12-20 12:18:25 +08:00   ❤️ 1
    是我问错了地方吗?
    ipoh
        2
    ipoh  
       2012-12-20 12:52:19 +08:00
    终于看明白了
    最好封装,SQLite连接数据库最多只是磁盘IO,比网络连接省时多了。况且OS还有缓存机制,第二次打开数据库很有可能不会访问磁盘了。我不了解SQLite,只是猜测。
    http://developer.appcelerator.com/question/130874/sqlite-performance-to-close-or-not-to-close-
    clino
        3
    clino  
       2012-12-20 14:33:43 +08:00
    连续的批量操作最好用事务,否则频繁打开关闭肯定会影响效率

    如果很讲究效率,数据库又不是非常大,可以考虑使用内存数据库,当然内存数据库可以定期保存到文件里,对内存数据库的操作在打开关闭上的开销应该就小很多了
    alexrezit
        4
    alexrezit  
    OP
       2012-12-20 17:45:02 +08:00   ❤️ 1
    @ipoh
    @clino

    谢谢!

    @ipoh
    这个和网络连接比起来当然是省时啦~ 主要是想达到最高效率嘛, 所以来问问~

    @clino
    不敢放内存里, 不然 iPod touch 这样小内存的得卡死了~
    我现在还是没有把打开和关闭封进去, 不过好在写了一个单独的 shared instance 管理所有数据库 / plist / 本地文件 / 网络文件操作.
    zhc
        5
    zhc  
       2012-12-20 17:58:29 +08:00
    你可以写个循环什么的用profile测试下开销,如果开销很低那就都封装到方法里随用随掉,代码也美观易读,我之前没测试过但都进行封装了.
    Veelian
        6
    Veelian  
       2012-12-20 21:44:59 +08:00 via iPad
    SQLite就是个文件数据库,单机上又极少多线程操作它,做成池就比较傻,所以一般是写成单例就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3360 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.