我维护一个收集大量信息并将这些信息存储在ArrayList中的应用程序。
详细地说,这个ArrayList被定义为ArrayList<FileInformation>,它的一些成员如下:
private File mFile;
private Long mSize;
private int mCount;
private Long mFilteredSize;
private int mFilteredCount;
private int mNumberOfFilters;等。
这种方法是可行的,但当我想介绍一些新功能时,它并不是很灵活。它在内存使用和规模能力方面也有一定的局限性.因此,我做了一些测试,如果数据库是更好的方法。从灵活性上看,这是毫无疑问的,但不知怎么的,我无法使它跑得足够快,成为一个真正的替代方案。
现在,数据库只有一个这样的表:
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 TRANSACTION和COMMIT TRANSACTION不会有任何区别。
有什么方法可以优化这种行为吗?
发布于 2012-06-21 12:17:31
为了澄清起见,将BEGIN TRANSACTION和END TRANSACTION放在一起将大大提高性能。引用自http://www.sqlite.org/faq.html#q19:
SQLite可以轻松地在一台平均桌面计算机上每秒执行50,000个或更多的插入语句。但它每秒钟只处理几十个事务。默认情况下,每个INSERT语句都是自己的事务.
发布于 2011-10-13 09:30:12
在我周末编写的应用程序上,我也遇到了类似的问题。
数据库中的数据在发布时是否包含在应用程序中?如果是这样的话,批量插入并不是它们的方法,相反,您需要查看如何创建数据库并将其包含在assets目录中并将其复制到设备上。这里有一个很好的链接。
否则,我不确定您是否能够为提高性能做更多的工作,此链接解释了批量插入到SqlLite数据库的方法。
编辑:您也可能希望发布您的insert代码。
https://stackoverflow.com/questions/7751980
复制相似问题