Возможно ли, что запрос для одного элемента вызывает исключение .CursorWindowAllocationException? - PullRequest
0 голосов
/ 23 апреля 2019

Я только что получил эту ошибку на моих крашлитиках:

Non-fatal Exception: android.database.CursorWindowAllocationException: Cursor window allocation of 4194304 bytes failed. 
   at android.database.CursorWindow.<init>(CursorWindow.java:136)
   at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:315)
   at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:155)
   at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:149)    

Но мой запрос получает только один элемент

SELECT * FROM Monitoring M JOIN FhirPackage F ON M.id=F.monitoringId WHERE uploadedToDeviceCentral = 0 AND F.readyToUpload = 1 AND M.userId=:userId AND M.organizationId=:orgId ORDER BY startTimestamp LIMIT 1

В этой таблице может храниться много данных, например, миллионы, но я просто ищу одну строку. Даже в этой ситуации возможно, что это вызывает утечку памяти? Есть что-то, что я могу с этим поделать?

1 Ответ

1 голос
/ 23 апреля 2019

Я сохраняю большую строку для каждой строки в FhirPackage (размер 52802), но не использую ее для предложения where этого запроса

Вы используете SELECT *, и вы присоединяетесь к FhirPackage. Итак, вы возвращаете эту большую строку (вместе со всеми другими столбцами в соединенных таблицах), и это может способствовать вашей проблеме.

Попробуйте ограничить список столбцов SELECT только теми столбцами, которые вам нужны, из таблиц, которые их содержат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...