Ошибка выделения окна SQLite Android Database Cursor размером 2048 КБ

У меня есть процедура, которая запускает разные запросы к базе данных SQLite много раз в секунду. Через некоторое время я бы получил ошибку

"android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = "появляются в LogCat.

У меня было использование памяти журнала приложения, и действительно, когда использование достигает определенного предела, я получаю эту ошибку, подразумевая, что она заканчивается. Моя интуиция подсказывает мне, что механизм базы данных создает НОВЫЙ буфер (CursorWindow )каждый раз, когда я запускаю запрос, и хотя я помечаю.close ()курсоры, ни сборщик мусора, ни SQLiteDatabase.releaseMemory()не достаточно быстро освобождает память. Я думаю, что решение может заключаться в том, чтобы «заставить» базу данных всегда записывать в один и тот же буфер, а не создавать новые, но я не смог найти способ сделать это. Я попытался создать свой собственный CursorWindow и безрезультатно попытался установить его и SQLiteCursor.

Любые идеи?

РЕДАКТИРОВАТЬ :запрос примера кода от @GrahamBorland:

public static CursorWindow cursorWindow = new CursorWindow("cursorWindow"); 
public static SQLiteCursor sqlCursor;
public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) {
query = "SELECT * FROM Items"; //would be more complex in real code
sqlCursor = (SQLiteCursor)db.rawQuery(query, null);
sqlCursor.setWindow(cursorWindow);
}

В идеале я хотел бы иметь возможность .setWindow()перед отправкой нового запроса и помещать данные в один и тот же CursorWindowкаждый раз, когда я получаю новые данные.

69
задан alex 5 July 2012 в 11:45
поделиться