-1

我正在开发一个 android 应用程序,我需要在其中下载一个JSON字符串并SQlite以特定格式将其保存在数据库中(在我看来,我没有其他选择可以选择任何其他数据存储)。这是我的表结构:

problem_table(pid INTEGER PRIMARY KEY, 
              num TEXT, title TEXT, 
              dacu INTEGER, 
              verdict_series TEXT)

在启动时,我需要将近4200 行输入到数据库表中。我正在使用模拟器,当我启动该应用程序时,它运行良好。但是在数据库操作开始后,该应用程序似乎冻结了一段时间。最终,该应用程序设法插入所有行,但需要花费大量时间。即使在某一点上,它也显示出以下外观:

在此处输入图像描述

那么如何降低时间记忆复杂性,或者如何以更优化的方式做到这一点或避免这种临时故障?

NS:由于我的范围不够,我还没有在任何真实设备中检查它。我的模拟器使用 512 RAM 和 48 堆大小。

4

2 回答 2

1

不要在 UI 线程中进行数据库操作,而是在 AsyncTask、Thread、Service 或其他任何东西中进行,而不是在 UI 线程中进行。

于 2013-08-02T10:08:38.523 回答
1

我通过这里给出的@Jakobud 答案解决了它

答: 通常,每次db.insert()使用时,SQLite 都会创建一个事务(并在文件系统中生成日志文件)。如果您使用SQLitedb.beginTransaction()并且同时db.endTransaction()提交所有插入,则会大大加快速度。

下面是一些伪代码:Batch insert to SQLite database on Android

try
{
  db.beginTransaction();
  for each record in the list
  {
    do_some_processing();
    if (line represent a valid  entry)
    {
      db.insert(SOME_TABLE, null, SOME_VALUE);
    }
    some_other_processing();
  }
  db.setTransactionSuccessful();
}
catch (SQLException e) {}
finally
{
  db.endTransaction();
}
于 2013-08-04T11:56:36.737 回答