пример - Является ли SQLite cursor.getCount дорогой операцией в Android




example getcolumnindex (2)

Является ли SQLite cursor.getCount () дорогой операцией при выполнении на устройстве Android ?

Что быстрее:

Cursor cursor = db.rawQuery(sql, null);
int length = cursor.getCount();
final List<Item> items = new ArrayList<Item>(length * 2); // need maybe 2 items per row

if (cursor.moveToFirst()) {

      // loop trough the query result
      do {
...

или же

Cursor cursor = db.rawQuery(sql, null);
final List<Item> items = new ArrayList<Item>();  // capacity is 0 by default on android

if (cursor.moveToFirst()) {

      // loop trough the query result
      do {

Answers

Если вы сравните время, необходимое для выполнения обоих примеров кода, вы заметите, что оно одинаково, потому что Cursor.moveToFirst() в конечном итоге вызывает SQLiteCursor.getCount()


Это, похоже, внутренняя шутка в Google. Он также отображается в диспетчере задач Google Chrome. У него нет никакой цели, кроме некоторых инженеров, которые считают это забавным. Какая цель сама по себе, если хотите.

  1. В Chrome откройте диспетчер задач с помощью Shift + Esc .
  2. Щелкните правой кнопкой мыши, чтобы добавить столбец Goats Teleported .
  3. Удивляться.

Существует даже огромный отчет об ошибке Chromium о слишком большом количестве телепортированных козлов .

Следующий фрагмент исходного кода Chromium украден из комментариев HN .

int TaskManagerModel::GetGoatsTeleported(int index) const {
  int seed = goat_salt_ * (index + 1);
  return (seed >> 16) & 255;
}




android sqlite