В моем приложении для Android я выполняю операции SQlite DB, такие как вставка, удаление, обновление записей. Я хочу знать, нравится ли мне ниже:

long t1 = System.currentTimeMillis();
for(i =0; i<N; i++)
{
  insertRecord();
}
long t2 = System.currentTimeMillis();

Действительно ли t2-t1 будет равно времени, необходимому для вставки N записей в БД. Я имею в виду, это вызов для вставки синхронного или асинхронного.

3
Pardeep Kr 14 Апр 2016 в 13:50

3 ответа

Лучший ответ

Если вы находитесь внутри транзакции, данные будут фактически записаны и синхронизированы только после завершения транзакции.

Если вы не используете явные транзакции, все происходит внутри вызова insert(), и вы действительно измеряете то, что хотите. Однако такие операции выполняются с неявной транзакцией, что делает их довольно медленными (поскольку накладные расходы на синхронизацию присутствуют для каждой команды).

Когда вы выполняете несколько связанных операций с базой данных, вы должны объединить их все в одну транзакцию:

long t1 = System.currentTimeMillis();

db.beginTransaction();
try {
    for(i =0; i<N; i++) {
        insertRecord();
    }
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

long t2 = System.currentTimeMillis();
1
CL. 14 Апр 2016 в 10:55

Если вы вызываете эти методы CRUD из нескольких мест, лучше сделать эти методы синхронизированными, чтобы избежать блокировки и получения исключения.

1
Swapnil Sharma 14 Апр 2016 в 10:59

Это синхронная вставка, потому что она вставляется одна за другой, в другой руке должна выполняться первая вставка для выполнения второй

Вы также можете использовать AsyncTask для решения проблемы скорости вставки

0
Salah Nour ElDin 14 Апр 2016 в 10:54