Гуглинг предполагает, что он должен .
Но пример реализации dragdroprobot (на родительском объекте Robot) не предлагает:
QRectF Robot::boundingRect() const
{
return QRectF();
}
Что правильно, или происходит что-то более тонкое?
-121--1813038-
Я использую базу данных SQLite
в приложении Android и метод getAll
, который я написал, занимает слишком много времени.
Это код, о котором я говорю:
public static List getAll(Context context) {
List feeds = new ArrayList();
Uri allFeeds = Uri.parse(ContentProvidersUris.URL_CONTENT_PROVIDER_FEED);
long startQuery = BenchmarkUtils.start();
Cursor c = context.getContentResolver().query(allFeeds, null, null, null, "title desc");
long startCursor = BenchmarkUtils.start();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
long startInsideCursor = BenchmarkUtils.start();
Feed feed = new Feed();
feed.setContent(c.getString(c.getColumnIndex(FeedsProvider.COL_WEBVIEW_CONTENT)));
feed.setDate(c.getString(c.getColumnIndex(FeedsProvider.COL_PUB_DATE)));
feed.setDescription(c.getString(c.getColumnIndex(FeedsProvider.COL_DESCRIPTION)));
feed.setName(c.getString(c.getColumnIndex(FeedsProvider.COL_FEED_NAME)));
Log.d(TAG, "This loop cursor iteration took : " + BenchmarkUtils.stop(startInsideCursor) + " ms.");
}
Log.d(TAG, "Looping through the ENTIRE Cursor took: " + BenchmarkUtils.stop(startCursor) + " ms.");
return feeds;
}
Как вы видите, я также измеряю время, занятое этим циклом на каждой итерации, и оказывается, что это занимает среднее время 1800 мс (на Nexus S
). Я считаю, что это много времени. И я не понимаю, что большая часть этого времени тратится на первую итерацию , как показано в журналах:
D/FeedsProviderHelper (5800): Это повторение курсора петли взяло: 1 726 мс.
D/FeedsProviderHelper (5800): Эта итерация курсором цикла заняла: 3 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 2 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 3 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 2 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 3 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 3 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 2 мс.
D/FeedingProvireHelper (5800): Эта итерация курсором цикла заняла: 0 мс.
D/FeedingProvireHelper (5800): Эта итерация курсором цикла заняла: 5 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 1 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 1 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 5 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 1 мс.
D/FeaingProvireHelper (5800): Эта итерация курсором цикла заняла: 1 мс.
D/FeedingProvireHelper (5800): Эта итерация курсоров цикла заняла: 1 мс.
D/FeedingProvireHelper (5800): закольцовывание всего курсора заняло: 1770 мс.
Так что мои вопросы:
Это нормально? Если да, то почему? Если нет, то что я делаю не так? Любой более быстрый способ выполнения startAll
для базы данных SQLite?
Спасибо!
EDIT
Я вывел вызовы getColumnIndex
из цикла в соответствии с предложением @ superfell,и теперь я запускаю метод getAll
в среднем 1500 мс . Это быстрее, но недостаточно быстро на мой взгляд (еще раз)!