首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么写入内存中的SQLITE数据库比使用ArrayList要慢得多?

为什么写入内存中的SQLITE数据库比使用ArrayList要慢得多?
EN

Stack Overflow用户
提问于 2011-10-13 09:23:37
回答 2查看 2.2K关注 0票数 0

我维护一个收集大量信息并将这些信息存储在ArrayList中的应用程序。

详细地说,这个ArrayList被定义为ArrayList<FileInformation>,它的一些成员如下:

代码语言:javascript
复制
private File mFile;
private Long mSize;
private int mCount;
private Long mFilteredSize;
private int mFilteredCount;
private int mNumberOfFilters;

等。

这种方法是可行的,但当我想介绍一些新功能时,它并不是很灵活。它在内存使用和规模能力方面也有一定的局限性.因此,我做了一些测试,如果数据库是更好的方法。从灵活性上看,这是毫无疑问的,但不知怎么的,我无法使它跑得足够快,成为一个真正的替代方案。

现在,数据库只有一个这样的表:

代码语言:javascript
复制
CREATE TABLE ExtContent (
                        "path" TEXT not null, 
                        "folderpath" TEXT not null, 
                        "filename" TEXT,
                        "extention" TEXT,
                        "size" NUMERIC,
                        "filedate" NUMERIC,
                        "isfolder" INTEGER not null,
                        "firstfound" NUMERIC not null,
                        "lastfound" NUMERIC not null,
                        "filtered" INTEGER not null
                       );

性能问题是巨大的。收集和编写~14000项目需要~3分钟!当写入数据库时,只写入4-5秒,如果写入ArrayList,则为。在内存中创建数据库并没有很大的区别。

由于我在SQLITE方面的经验非常有限,我首先通过android.database.sqlite.SQLiteDatabase.insert方法创建条目。

由于基于文件的数据库和内存中的数据库之间没有任何有意义的区别,我想使用BEGIN TRANSACTIONCOMMIT TRANSACTION不会有任何区别。

有什么方法可以优化这种行为吗?

EN

回答 2

Stack Overflow用户

发布于 2012-06-21 12:17:31

为了澄清起见,将BEGIN TRANSACTIONEND TRANSACTION放在一起将大大提高性能。引用自http://www.sqlite.org/faq.html#q19

SQLite可以轻松地在一台平均桌面计算机上每秒执行50,000个或更多的插入语句。但它每秒钟只处理几十个事务。默认情况下,每个INSERT语句都是自己的事务.

票数 3
EN

Stack Overflow用户

发布于 2011-10-13 09:30:12

在我周末编写的应用程序上,我也遇到了类似的问题。

数据库中的数据在发布时是否包含在应用程序中?如果是这样的话,批量插入并不是它们的方法,相反,您需要查看如何创建数据库并将其包含在assets目录中并将其复制到设备上。这里有一个很好的链接

否则,我不确定您是否能够为提高性能做更多的工作,此链接解释了批量插入到SqlLite数据库的方法。

编辑:您也可能希望发布您的insert代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7751980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档